【发布时间】:2013-12-06 11:52:01
【问题描述】:
我是 Entity Framework 的新手,虽然它比 NHibernate 有很多优点,但我很失望地发现它不支持延迟加载属性。
参加这门课:
public class Product
{
public virtual Guid Id {get;set;}
public virtual string Name {get;set;}
public virtual string Details {get;set;}
}
我的计划是使用实体拆分将其映射到两个表:
CREATE TABLE [dbo].[Product](
[Id] [uniqueidentifier] NOT NULL PRIMARY KEY,
[Name] [nvarchar](50) NULL
)
CREATE TABLE [dbo].[ProductDetails](
[Id] [uniqueidentifier] NOT NULL PRIMARY KEY,
[Details] [nvarchar](max) NULL
)
这是我的流畅映射:
modelBuilder.Entity<Product>()
.Map(m =>
{
m.Properties(t => new { t.Id, t.Name });
m.ToTable("Product");
})
.Map(m =>
{
m.Properties(t => new { t.Id, t.Details});
m.ToTable("ProductDetails");
});
我希望能够在不加载详细信息字段的情况下显示产品列表。但是,每当我加载产品时,它总是会进行 INNER JOIN。我希望它只从 Product 中读取,然后在我读取 Details 属性时从 ProductDetails 中读取。
如何做到这一点?
如果不可能,我还能如何实现属性的延迟加载?
表拆分是不可接受的,因为这意味着持久性机制决定了域的设计。
在 CodeCaster 回答后编辑:
域是固定的 - 我不想要引入 ProductDetails 实体的解决方案。这个问题是关于持久化现有的域模型。更改域并不能回答问题。
【问题讨论】:
标签: c# sql entity-framework lazy-loading domain-model