【问题标题】:When entity is internal, lazy loading does not work当实体在内部时,延迟加载不起作用
【发布时间】:2017-02-13 14:53:24
【问题描述】:

实体类在内部时,是否可以强制实体框架延迟加载集合?所有代码都是用代码优先和流畅的API编写的。我有这样的情况:

internal class Order
{
   public int Id { get; set; }
   public ICollection<Operation> Operations { get; set; }
}

internal class Operation
{
   public int Id { get; set; }
   public int OrderId { get; set; }
   public Order Order { get; set; }
}

internal MyContext : DbContext
{
   internal DbSet<Order> Orders { get; set; }
   internal DbSet<Operation> Operations { get; set; }

   protected override void OnModelCreating(DbModelBuilder modelBuilder)
   {
       modelBuilder.Entity<Operation>().HasRequired(x => x.Order)
                                       .WithMany(x => x.Operations)
                                       .HasForeignKey(x=>x.OrderId);
   }
}

我不明白为什么实体框架不延迟加载操作集合。我在上下文中有延迟加载。有可能管理这个吗?

【问题讨论】:

    标签: c# entity-framework


    【解决方案1】:

    恐怕这是不可能的,public classes 是 EF 创建代理类和启用延迟加载的要求。看看这个msdn page 了解更多信息:

    自定义数据类必须声明为具有公共访问权限。

    【讨论】:

    • 就这样吗?这个主题有什么解决方法吗?我不明白为什么 EF 团队这样做是对的。
    • 因为您在自定义程序集中定义实体模型,EF 肯定会使用反射来获取您的模型类并创建启用延迟加载的代理类,它就像您的类的包装器(继承来自您的实体),这就是为什么它需要是public
    • 所以也许我需要给 InternalVisibleTo EntityFramework?
    • 对不起,恐怕不存在:)
    • EF4 对 internal 类的延迟加载没有问题(对于 db first);但突然 EF6 需要public。这非常令人失望。
    猜你喜欢
    • 2014-03-13
    • 1970-01-01
    • 1970-01-01
    • 2015-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多