make byte []属性加载延迟

时间:2011-04-07 13:50:43

标签: entity-framework lazy-loading ef-code-first entity-framework-4.1

我正在使用 EF4 Code First ,我有一个属性:

public byte[] Bytes {get;set;}

我可以懒惰加载此属性(仅在需要时)吗?

2 个答案:

答案 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中修复(但我不知道它是否真的已修复)。