我在带有SQL Compact Edition 4.0的Visual Basic(VS2010)的.NET V4.0中使用EF。我们正在构建一组简单的表单来维护一些表。一个表“ Companies”链接到另两个表(“ People”,“ CalibrationInfo”),并将“ Companys”作为父表。实体类型定义为:
<EntityType Name =“ Company”>
<Documentation>
<Summary>提供公司和收货地址的列表。</ Summary>
</ Documentation>
<Key>
<PropertyRef Name =“ CompanyID” />
< /密钥>
<Property Name =“ CompanyID” Type =“ Int32” Nullable =“ false”注释:StoreGeneratedPattern =“ Identity” />
<Property Name =“ Name” Type =“ String”
<属性名称=“ Address1”类型=“ String” MaxLength =“ 100” Unicode =“ true” FixedLength =“ false” />
<属性名称=“ Address2”类型=“ String” MaxLength =“ 100” Unicode =“ true “ FixedLength =” false“ />
<属性名称=” Address3“ Type =” String“ MaxLength =” 100“ Unicode =” true“ FixedLength =” false“ />
<属性名称=” Telephone“ Type =” String“ MaxLength =“ 30” FixedLength =“ false” Unicode =“ true” />
<属性名称=“ PrimaryContactID” Type =“ Int32” a:GetterAccess =“ Public” xmlns:a =“ http://schemas.microsoft.com/ ado / 2006/04 / codegeneration“ a:SetterAccess =”Public“ Nullable =” true“>
<Documentation>
<Summary>该公司主要联系人的可选主要联系人ID。</ Summary>
</ Documentation>
</ Property>
<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>
该表单使用设置为在上下文中设置的Company的绑定源:
bsCompanies = ctx.Companies .OrderBy(“ it.Name”)
绑定源链接到导航栏。按下BindingNavigatorAddNewItem按钮将创建一个新记录。我仅在下一个字段中输入公司名称标签,然后按保存按钮。到主要联系人的链接设置为空,因此此记录没有其他关系。保存按钮执行以下操作:
RowsSaved = ctx.SaveChanges()
这将生成InvalidOperationException。内部异常是:
AcceptChanges无法继续,因为该对象的键值与另一个对象冲突...
数据库中没有其他名称设置为“ Test”的记录。异常表示记录已保存,但无法接受更改。该记录仍被标记为已添加。在此错误之后调用ctx.AcceptChanges会生成异常。
如果我直接在代码中执行此操作,而不是在表单上使用BindingSource,则其本质如下所示:将
昏暗的公司作为新公司
company.Name =“ Test”
company.PrimaryContactID =无
ctx.Companies.Add(company)
ctx 。救
我在Multipe网站上查看了其他示例,并应用了我能找到的所有修复程序,包括将PrimaryContact ID直接设置为正确的Person记录ID,并将PrimaryContact设置为Nothing。没有任何区别。
我还从模型中删除了三个表,然后重新加载它们。没有不同。
我已经在SQL Server中使用了相同的代码而没有任何问题,但是SQL Compact Edition V4.0似乎几乎没有任何作用。您会认为将单个记录存储到表中并不难。如果我们必须回到数据集,我需要做很多重新编码。
任何建议或见解表示赞赏。谢谢,尼尔
顺便说一句,对此的答案是使用Nuget下载Entity Framework 6.0,Entity Framework SQL Server Compact和Microsoft SQL Server Compact 4.0。然后,我下载了EF Framework 5 DB Generator .tt文件,因为EF 6版本在Visual Studio 2010中不起作用。您可以从“添加代码生成”菜单项中执行此操作,然后选择“在线模板”->“ EF 5 DBContext Generator ...”。 ,我使用以下Microsoft文章修改了该文件:使用WinForms进行数据绑定。在那之后,事情开始起作用。如果没有上述更改,EF 4.0不能立即与SQL Server Compact一起使用。使用本文中描述的ObservableListSource类还有助于解决窗体上的父子关系,直到我切换到此类之前,父子关系才起作用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句