我们有一个生成的数据模型,我们不应该修改,我们试图将其映射并保存到数据库中。其中一个属性是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.
显然,它尝试使用相同的列表键和索引保存到数据库,但尝试添加数据而不是更新或删除。我们做错了吗?这是预期的错误吗?
如果可以,请帮助我。 提前谢谢。