为啥实体框架 System.Data.Entity.Core.Objects.RelationshipEntry 错误? (用于更改跟踪)

Posted

技术标签:

【中文标题】为啥实体框架 System.Data.Entity.Core.Objects.RelationshipEntry 错误? (用于更改跟踪)【英文标题】:Why is the Entity Framework System.Data.Entity.Core.Objects.RelationshipEntry Wrong? ( For Change Tracking)为什么实体框架 System.Data.Entity.Core.Objects.RelationshipEntry 错误? (用于更改跟踪) 【发布时间】:2014-11-26 13:20:10 【问题描述】:

全部:

我们公司正在开发一个使用实体框架的 ASP.NET 应用程序。 采用实体框架模型优先方法来创建数据库表和 POCO 此外,我们正在使用 Effort Testing Tool for Entity Framework 和 NUnit Framework 来进行单元测试。

目前,我们正在客户和帐户业务实体 ASP.NET 应用程序上尝试一些 CRUD 操作。

每位客户最多可选择拥有一个帐户。 以下是 2 个表之间的关系在数据库图中的样子:

我们的应用程序还跟踪实体的变化跟踪以及实体之间的关系。

我们有以下代码示例,其中包含填充的客户和帐户业务条目:

        Customer custFour = new Customer  CustomerID = "4    ", Orders = new HashSet<Order>(), CustomerDemographics = new HashSet<CustomerDemographic>(), CompanyName = "FC Barcelona", ContactName = "Lionel Messi", ContactTitle = "current top basket ball player", Address = "344 testing street", City = "Buenos Aires", Region = "Oklahoma", PostalCode = "4498", Country = "Argentina", Phone = "2344949494", Fax = "33325" ;

        Account acctFour = new Account  UserName = "lmessi", Password = "myteamlostworldcupmatch", Customer = custFour, AccountRoleMaps = new HashSet<AccountRoleMap>() ;

为了简单起见,我们还调用了如下一行代码,以便实体框架 DbContext 可以保存上面提到的 Customer 和 Account 实体,以及 Customer 和 Account 实体之间的关系:

_context.Set<Account>().Add(acctFour);

_context.SaveChanges();

随着执行点的继续,我们最终得到以下代码摘录:

            List<System.Data.Entity.Core.Objects.ObjectStateEntry> allAddModDelItems = ((IObjectContextAdapter)_context).ObjectContext.ObjectStateManager.GetObjectStateEntries(EntityState.Added | EntityState.Modified | EntityState.Deleted).ToList();

            foreach (var osEnt in allAddModDelItems)
            

            

上面的代码摘录检索所有对象以及已添加、修改和删除的对象之间的关系。

我已经检查了客户的 System.Data.Entity.Core.Objects.EntityEntry 和帐户的 System.Data.Entity.Core.Objects.EntityEntry,它们具有有效的业务数据。

遗憾的是,System.Data.Entity.Core.Objects.RelationshipEntry 的 Entity 为 null 而 EntityKey 为 null 这似乎是错误的,因为 System.Data.Entity.Core.Objects.RelationshipEntry 应该反映两者之间的关系我创建的 Account 和 Customer 对象。 为什么 System.Data.Entity.Core.Objects.RelationshipEntry 错误?也就是说,为什么 System.Data.Entity.Core.Objects.RelationshipEntry 的 Entity 和 EntityKey 属性为空?

【问题讨论】:

【参考方案1】:

http://msdn.microsoft.com/en-us/library/system.data.objects.objectstateentry.entity%28v=vs.100%29.aspx

当 ObjectStateEntry 与 RelationshipSet 条目而不是实体类型实例相关联时,Entity 属性返回 null。

因此,Entity 和 EntityKey 属性为 null 是有意义的

【讨论】:

以上是关于为啥实体框架 System.Data.Entity.Core.Objects.RelationshipEntry 错误? (用于更改跟踪)的主要内容,如果未能解决你的问题,请参考以下文章

无法加载实体框架提供程序类型“System.Data.Entity.SqlServer.SqlProviderServices,EntityFramework.SqlServer”

找不到源类型“System.Data.Entity.DbSet”的查询模式的实现

我的 C# 实体框架项目出没了吗?

无法加载具有不变名称“System.Data.SqlServerCe.4.0”的 ADO.NET 提供程序

如何自定义实体框架类?

MVC开发中的常见错误-03-System.Data.Entity.Validation.DbEntityValidationException: 对一个或多个实体的验证失败。有关详细信息,请参见“E