使 byte[] 属性加载惰性

发布于 2024-10-31 03:58:27 字数 142 浏览 0 评论 0原文

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

public byte[] Bytes {get;set;}

我可以使该属性延迟加载(仅在需要时加载)吗?

I'm using EF4 Code First and I have a property:

public byte[] Bytes {get;set;}

can I make this property load lazily ( only when it's needed) ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

放我走吧 2024-11-07 03:58:27

表拆分在 EF 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();
    }
}

Table spliting works in EF 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();
    }
}
空气里的味道 2024-11-07 03:58:27

这确实是自 EF 1、EF 4 和 仍然是 EF 4.1

该链接与 CTP5 相关,唯一可能的解决方案是表拆分。您基本上需要定义两个实体类,但将它们映射到数据库中的一个表。然后,加载 byte[] 的任务被简化为加载正常的导航属性。

帖子中的答案谈到了 CTP5 中的一个错误,该错误导致表分割无法正常工作,但希望现在可以在 EF 4.1 RC 中修复(但我不知道它是否真的修复了)。

That's indeed an old common request since EF 1, EF 4 and still in EF 4.1.

The link is related to CTP5 and the only possible solution is Table Splitting. You basically need to define two entity classes but map them to one single table in the database. The task to load the byte[] is then reduced to loading a normal navigation property.

The answer in the post talks about a bug in CTP5 which made Table splitting not working correctly but which is hopefully fixed now in EF 4.1 RC (but I don't know if it's really fixed).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文