[英]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.