我必须上课和他们之间的一对多关系。
EstimateVersion.cs
private ISet<Template> _templates;
public virtual ISet<Template> Templates
{
get { return _templates ?? (_templates = new HashedSet<Template>()); }
set { _templates = value; }
}
Template.cs
public virtual EstimateVersion EstimateVersion { get; set; }
以下是它们之间的关系如何在映射文件中定义:
EstimateVersion.hbm.xml
<set name="Templates" table="EST_TTemplate" cascade="all-delete-orphan" schema="{TRAN_USER}" inverse="true">
<key column="EstimateVersionId" />
<one-to-many class="Template" />
</set>
Template.hbm.xml
<many-to-one name="EstimateVersion" class="EstimateVersion" column="EstimateVersionId" />
在我创建EstimateVersion
的代码中,这就是我让对象知道它们之间关系的方式。
var version = new EstimateVersion();
//Code that inserts values into the object's properties
Repository.Save(version);
var template = new Template();
//Code that inserts values into the object's properties
Repository.Save(template);
template.EstimateVersion = version;
插入估计版本的查询运行正常,但在插入模板记录时,它会尝试将null插入EstimateVersionId并抛出错误,因为它不可为空。 (我认为如果它可以为空,它会首先将其插入为null,然后使用正确的值更新它。)
我该如何纠正?
答案 0 :(得分:2)
正如秘密松鼠所说,这些线应该是另一种方式。通过首先在Template对象上设置EstimateVersion,更新将为您保存外键链接,并且不会尝试插入空值。
所以代码示例应为:
var version = new EstimateVersion();
//Code that inserts values into the object's properties
Repository.Save(version);
var template = new Template();
//Code that inserts values into the object's properties
template.EstimateVersion = version;
Repository.Save(template);