2017-02-13 49 views
3

當實體類是內部時,可以強制實體框架延遲加載集合?所有的代碼都是先用代碼編寫的,流暢的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); 
    } 
} 

而我不明白爲什麼實體框架不會延遲加載操作集合。我在上下文中延遲加載true。有可能管理這個?

回答

4

恐怕不可能,public類是EF創建代理類和啓用延遲加載的要求。看看這個msdn page瞭解更多信息:

自定義數據類必須聲明爲公共訪問。

+0

就這樣?在這個主題中有什麼解決辦法?我不明白爲什麼英孚團隊這樣做是正確的。 – CrazyBaran

+0

因爲你在自定義程序集中定義了你的實體模型,所以EF肯定會使用反射來獲得你的模型類並創建代理類,它們是啓用延遲加載的代理類,就像你類的包裝器(從你的實體繼承),這就是爲什麼它需要'公共' – octavioccl

+1

所以,也許我需要給InternalVisibleTo EntityFramework? – CrazyBaran