0

我要类和它们之间的一对多关系。

估计版本.cs

private ISet<Template> _templates;
public virtual ISet<Template> Templates
{
    get { return _templates ?? (_templates = new HashedSet<Template>()); }
    set { _templates = value; }
}

模板.cs

public virtual EstimateVersion EstimateVersion { get; set; }

以下是如何在映射文件中定义它们之间的关系:

估计版本.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>

模板.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 并抛出错误,因为它不可为空。(我认为如果它可以为空,它会首先将其插入为空,然后用正确的值更新它)。

我该如何纠正?

4

1 回答 1

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);
于 2013-08-09T13:12:15.173 回答