代码之家  ›  专栏  ›  技术社区  ›  Nour

在fluent nhibernate中,保存多对一实体,为什么我要给引用的实体一个版本

  •  0
  • Nour  · 技术社区  · 14 年前

    我有以下实体:

    public class Worker
    {
     public int WorkerID {get;set;}
     public string Name { get;set;}
     public int version { get;set;}
    }
    
    public class TransferOrder
    {
      public int TransferOrderID { get;set;}
      public Worker workerTobeTransfered{get;set;}
      public int version { get;set;}    
    }
    

    我用的是自动映射,用流利的nhibernate语言。 当我试图像这样保存TransferOrder时:

    TransferOrder order = new TransferOrder();
    order.Worker = new Worker(){WorkerID = 1};
    Session.Save(order);
    

    但在数据库中,TransferOrder表中的workerID为空??? 但是,当我给工人一个版本,它是保存为正常?

    TransferOrder order = new TransferOrder();
    order.Worker = new Worker(){WorkerID = 1,Version = 1};
    Session.Save(order);
    

    请注意,只要不是0,给worker的版本号就不重要了。 数据库中保存了一个worker,workerID=1。

    我怎么处理?为什么我要给工人一个版本???nhibernate是否确保工人获救??为什么要这么做?

    2 回复  |  直到 14 年前
        1
  •  0
  •   Nicholas Murray    14 年前

    也许这就是场景:

    你的工作。工作ID是工作表中的标识列,不能在表中插入仅包含标识列条目的行。

    但是当你为工作.版本,则您正在创建有效的插入。

        2
  •  0
  •   Rich    14 年前

    “version”可能会自动映射到NHibernate属性以进行乐观并发检查。我将使用Fluent NHibernate生成映射XML来查看它在使用什么,因为我无法通过Google找到关于auto-mapped的默认设置的任何信息。

    推荐文章