【发布时间】:2020-04-03 21:18:53
【问题描述】:
实体类:
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; }
}
休眠配置:
<?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();
}
Purchase 表对 Customer 表有 FK。
我得到:“SqlException:无法将值 NULL 插入到列 'CustomerId'、表 'ORM.dbo.Purchase';列不允许空值。插入失败。”
我在想,我做错了什么。 非常感谢您的回答。
【问题讨论】:
-
嗨,你使用什么样的生成器来生成键值?我在您发布的配置中看不到任何内容。文档说这是必需的。问题可能是 NHibernate 首先插入客户,然后不知道如何为其获取键值。 nhibernate.info/doc/nhibernate-reference/mapping.html
-
让我知道,如果我的回答不能解决您的问题,我可以更详细地研究一下。祝你好运!
-
不幸的是,我必须从代码生成密钥,而不是通过 Db。所以我可能需要其他解决方案。非常感谢您的宝贵时间。
-
在这种情况下,请使用
generator=assigned,我会更新我的答案 -
一切正常,非常感谢!
标签: c# nhibernate