簡體   English   中英

NHibernate 多對一映射

[英]NHibernate many-to-one mapping

實體類:

public class Purchase
{
   public virtual int PurchaseId { get; set; }
   public virtual int CustomerId { get; set; }
   public virtual Customer Customer { get; set;}
}

public class Customer
{
    public virtual int CustomerId { get; set; }
    public virtual string FirstName { get; set; }
    public virtual string LastName { get; set; }
}

hibernate 配置:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="xxx" assembly="xxx">
  <class name="Purchase" table="Purchase">
    <id name="PurchaseId" column="PurchaseId" />
    <many-to-one name="Customer" column="CustomerId"/>
  </class>
</hibernate-mapping>

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="xxx" assembly="xxx">
  <class name="Customer" table="Customer">
    <id name="CustomerId" column="CustomerId" />
    <property name="FirstName" column="FirstName" />
    <property name="LastName" column="LastName" />
  </class>
</hibernate-mapping>

我正在嘗試將新購買保存到數據庫:

 using (var session = _sessionFactory.Create())
 {
     var customer = new Customer { CustomerId = 1, FirstName = "John", LastName = "Smith" };
     var purchase = new Purchase { PurchaseId = 1, Customer = customer };

     session.Save(purchase);
     session.Flush();
 }

采購表有 FK 到客戶表。

我得到:“SqlException:無法將值 NULL 插入 'CustomerId' 列,表 'ORM.dbo.Purchase';列不允許空值。插入失敗。”

我想知道,我做錯了什么。 非常感謝您的回答。

問題可能是 NHibernate 並不真正知道要將CustomerId的什么值插入到Purchase表中,因為它不知道如何獲取該鍵。

您能否嘗試更改映射以包含 生成器

請注意,根據 NHibernate Docs

generator:生成器 class 的名稱,用於為持久 class 的實例生成唯一標識符。 請參閱生成器元素。 需要指定屬性或元素。 屬性優先於元素。

現在,選擇哪個確切的生成器是一個更大的主題,取決於您的用例,請參閱如何在 NHibernate 中自動生成 ID 中的一些信息

如果您想在代碼中分配鍵,您應該選擇assigned的生成器,見下文

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="xxx" assembly="xxx">
  <class name="Purchase" table="Purchase">
    <id name="PurchaseId" column="PurchaseId" generator="assigned" />
    <many-to-one name="Customer" column="CustomerId"/>
  </class>
</hibernate-mapping>

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="xxx" assembly="xxx">
  <class name="Customer" table="Customer">
    <id name="CustomerId" column="CustomerId" generator="assigned"/>
    <property name="FirstName" column="FirstName" />
    <property name="LastName" column="LastName" />
  </class>
</hibernate-mapping>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM