【发布时间】:2013-11-25 16:51:17
【问题描述】:
我正在将项目从 NHibernate 转换为 Entity Framework 6。
鉴于这个简单的模型:
public class User
{
public int ID { get; set; }
public string FullName { get; set; }
public virtual Organization Organization { get; set; }
// [...]
}
public class Organization
{
public int ID { get; set; }
public string Name { get; set; }
public virtual List<User> Users { get; set; }
// [...]
}
通过组织导航属性访问主键(ID)将导致整个组织实体被加载到上下文中:
foreach(var user in db.Users)
Console.WriteLine(user.Organization.ID);
鉴于 OrganizationID 外键是用户行的一部分,我应该能够访问它而不会导致整个实体的延迟加载(实际上,NHibernate 正确地做到了这一点)。
没有将外键 ID 的属性添加到我的所有 100 多个实体中,这样我就可以在不加载实体的情况下访问它们的值,有什么办法可以避免这种行为吗? p>
编辑:此外,即使进行空检查也会导致组织实体的负载(不在 NHibernate 中):
foreach(var user in db.Users)
Console.WriteLine(user.Organization != null);
我猜这是由于实体代理在这两个框架中实现方式的根本差异。所以我必须调整我所有的代码来适应这种令人沮丧的新行为......除非有人已经经历过这个并且可以启发我?
【问题讨论】:
-
您好 ECC-Dan,您最终是如何解决这个问题的?我面临同样的问题,我不想为每个导航属性添加 ID。
-
抱歉回复晚了;我从来没有解决这个问题,因为与 NHibernate 相比,由于这个和其他更严重的限制,我们实际上最终放弃了向实体框架的转换。
标签: c# entity-framework ef-code-first entity-framework-6