我正在使用 EF4 Code First ,我有一个属性:
public byte[] Bytes {get;set;}
我可以懒惰加载此属性(仅在需要时)吗?
答案 0 :(得分:5)
表拆分在EDF 4.1 RC中有效:
public class Item
{
public int Id { get; set; }
...
public virtual ItemDetail ItemDetail { get; set; }
}
public class ItemDetail
{
public int Id { get; set; }
public byte[] Bytes { get; set; }
}
public class Context : DbContext
{
public DbSet<Item> Items { get; set; }
public DbSet<ItemDetail> ItemDetails { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Item>().ToTable("Items");
modelBuilder.Entity<ItemDetail>().ToTable("Items");
modelBuilder.Entity<Item>()
.HasRequired(i => i.ItemDetail)
.WithRequiredPrincipal();
}
}
答案 1 :(得分:1)
这确实是自EF 1,EF 4和still in EF 4.1以来的旧常见请求。
该链接与CTP5相关,唯一可行的解决方案是表拆分。您基本上需要定义两个实体类,但将它们映射到数据库中的一个表。然后,加载byte []的任务将减少为加载正常的导航属性。
帖子中的答案谈到了CTP5中的一个错误,该错误导致Table分裂无法正常工作但现在希望在EF 4.1 RC中修复(但我不知道它是否真的已修复)。