Den*_*nko 5 c# entity-framework-6
我将我的应用程序从EF4.1更新为EF6,现在我有延迟加载问题.我使用EF6.x DbContext Generator来生成新的DbContext.所有的这个建议的文章也适用.
IEntityWithChangeTracker也不实施IEntityWithRelationshipsProxyCreationEnabled并LazyLoadingEnabled设置为true对我来说看起来也很奇怪的是,如果我明确地包含导航属性,Include("...")那么它就会被加载.
我的POCO和DbContext的简化版本:
public partial class Ideation
{
public Ideation()
{
}
public long Id { get; set; }
public Nullable<long> ChallengeId { get; set; }
public virtual Challenge Challenge { get; set; }
}
public partial class Challenge
{
public Challenge()
{
this.Ideations = new HashSet<Ideation>();
}
public long Id { get; set; }
public virtual ICollection<Ideation> Ideations { get; set; }
}
public partial class BoxEntities : DbContext
{
public TIBoxEntities()
: base("name=BoxEntities")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
public virtual DbSet<Ideation> Ideations { get; set; }
public virtual DbSet<Challenge> Challenges { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
此外,我试图设置ProxyCreationEnabled并LazyLoadingEnabled明确没有运气.该实体未加载为动态代理,因为此调试会话屏幕截图显示:

我还缺少什么?
可能发生这种情况的情况是,您尝试加载的实体Find已经作为非代理对象附加到上下文。例如:
using (var context = new MyContext())
{
var ideation = new Ideation { Id = 1 }; // this is NOT a proxy
context.Ideations.Attach(ideation);
// other stuff maybe ...
var anotherIdeation = context.Ideations.Find(1);
}
Run Code Online (Sandbox Code Playgroud)
anotherIdeation将是已附加的非代理,并且它不能够延迟加载。它甚至无法帮助运行数据库查询,var anotherIdeation = context.Ideations.SingleOrDefault(i => i.Id == 1);因为查询的默认合并选项是AppendOnly,即只有在尚不存在具有该键的附加实体时才会添加新实体。因此,anotherIdeation仍然是非代理。
Local您可以在调用方法之前Find使用以下命令检查实体是否已附加GetById:
bool isIdeationAttached = context.Ideations.Local.Any(i => i.Id == id);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1403 次 |
| 最近记录: |