【发布时间】: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 属性为空?
【问题讨论】:
标签: c# asp.net entity-framework orm change-tracking