NHibernate:更新通过复合元素映射创建的集合时出错

时间:2012-06-14 23:41:57

标签: c# nhibernate list

我们有一个生成的数据模型,我们不应该修改,我们试图将其映射并保存到数据库中。其中一个属性是StringField元素的集合 - 只是字符串和时间戳的包装。我们的CustomObservableCollection有一个属性AsIList,可以将该集合作为IList获取并设置。

public class DataModel {
    public CustomObservableCollection<StringField> MyProperty { get; set; }
}

我们将其映射如下(这正是他们所说的in the official documentation第6.3节(向上滚动)):

<component name="MyProperty ">
    <list name="AsIList" table="List_MyProperty" cascade="all-delete-orphan" >
      <key column ="ListKey" />
      <list-index column="ListIndex" />
      <composite-element class="StringField" >
        <property name="_value" access="field" column="Value" type="String" />
        <property name="_timestamp" access="field" column="T" type="datetime2" />
      </composite-element>
    </list>
</component>

我们有一个数据网格控件,可以将一个项目添加到集合中; value和timestamp最初为null并保存到db。然后,当输入值时,我们通过session.Update方法保存数据并收到以下错误消息:

Message=Violation of PRIMARY KEY constraint 'PK__List_MyProperty_60BA83C3436BFEE3'. Cannot insert duplicate key in object 'dbo.List_MyProperty'. The duplicate key value is (d966195b-b6a2-454f-b62b-aea3d07b10e0, 0). The statement has been terminated.

显然,它尝试使用相同的列表键和索引保存到数据库,但尝试添加数据而不是更新或删除。我们做错了吗?这是预期的错误吗?

如果可以,请帮助我。 提前谢谢。

0 个答案:

没有答案