我在Visual Basic(VS2010)中使用带有SQL Compact Edition 4.0的.NET V4.0中的EF。我们正在构建一组简单的表单来维护一些表。一个表'Companies'链接到另外两个表(People,CalibrationInfo),其中Companies作为父表。实体类型定义是:
< EntityType Name =“Company”>
<文件>
<摘要>提供公司和送货地址列表。< / Summary>
< /文档和GT;
<钥匙及GT;
< PropertyRef Name =“CompanyID”/>
< / Key与GT;
< Property Name =“CompanyID”Type =“Int32”Nullable =“false”注释:StoreGeneratedPattern =“Identity”/>
< Property Name =“Name”Type =“String”MaxLength =“100”Unicode =“true”FixedLength =“false”Nullable =“false”/>
< Property Name =“Address1”Type =“String”MaxLength =“100”Unicode =“true”FixedLength =“false”/>
< Property Name =“Address2”Type =“String”MaxLength =“100”Unicode =“true”FixedLength =“false”/>
< Property Name =“Address3”Type =“String”MaxLength =“100”Unicode =“true”FixedLength =“false”/>
< Property Name =“Telephone”Type =“String”MaxLength =“30”FixedLength =“false”Unicode =“true”/>
< Property Name =“PrimaryContactID”Type =“Int32”a:GetterAccess =“Public”xmlns:a =“http://schemas.microsoft.com/ado/2006/04/codegeneration”a:SetterAccess =“Public” Nullable =“true”>
<文件>
<摘要>该公司主要联系人的可选主要联系人ID。< / Summary>
< /文档和GT;
< /性>
< Property Name =“Disabled”Type =“Boolean”Nullable =“false”DefaultValue =“false”/>
< NavigationProperty Name =“Calibrations”Relationship =“NWCUDataStoreModel.FK_CalibrationInfo_Company”FromRole =“Companies”ToRole =“CalibrationInfo”/>
< NavigationProperty Name =“PrimaryContact”Relationship =“NWCUDataStoreModel.FK_Company_PrimaryContact”FromRole =“Company”ToRole =“Person”/>
< /&的EntityType GT;
表单使用在上下文中设置的公司的绑定源:
bsCompanies = ctx.Companies.OrderBy(“it.Name”)
绑定源链接到导航栏。按BindingNavigatorAddNewItem按钮可创建新记录。我只将公司名称标签输入到下一个字段,然后按“保存”按钮。主要联系人的链接设置为空,因此此记录没有其他关系。 “保存”按钮执行以下操作:
RowsSaved = ctx.SaveChanges()
这会生成InvalidOperationException。内部例外是:
AcceptChanges无法继续,因为对象的键值与另一个对象冲突...
数据库中没有其他记录名称设置为“Test”。该异常表示记录已保存,但无法接受更改。该记录仍标记为已添加。在此错误之后调用ctx.AcceptChanges会生成异常。
如果我是直接在代码中执行此操作,而不是在表单上使用BindingSource,它实际上看起来像这样:
昏暗的公司作为新公司
company.Name = “测试”
company.PrimaryContactID =什么都没有
ctx.Companies.Add(公司)
ctx.Save
我在multipe网站上查看了其他示例,并应用了我能找到的任何修复程序,包括将PrimaryContact id直接设置为正确的Person记录ID并将PrimaryContact设置为Nothing。没有任何区别。
我还从模型中删除了三个表,然后重新加载它们。没有区别。
我在SQL Server中使用了相同的代码而没有任何问题,但似乎没有任何东西可以与SQL Compact版本V4.0一起使用。您会认为将单个记录存储到表中应该不那么困难。如果我们必须回到数据集,我需要做很多重新编码。
任何建议或见解表示赞赏。 谢谢,尼尔
答案 0 :(得分:0)