我有 .Net 4.0 应用程序,它使用 EntityFramework 5.0 来访问 MS SQL 数据库中的数据。
我使用数据库优先方法。所有表格都映射到 POCO 实体,该实体具有包含从 Web 服务接收的实体的附加属性。
数据库:
WH_Product (Id, NomenklatureId, SeriesId, Quantity)
服务有这样的数据:
Nomenklature (Id, Name, Producer...)
Series (Id, Number, Date...)
POCO 实体:
Product (Id, NomenklatureId, Nomenklature, SeriesId, Series, Quantity)
我对存储库实现有疑问。我需要为 Nomenklature 和 Series 属性实现延迟加载。
我制作了 ProductProxy 类,它实现了这样的加载:
public class ProductProxy:Product
{
private Nomenklature _nomenklature;
public override Nomenklature Nomenklature
{
get
{
if (_nomenklature==null)
{
_nomenklature = <code for load Nomenklature from webService by base.NomenklatureId>
}
return _nomenklature;
}
}
private Series _series;
public override Series Series
{
get
{
if (_series==null)
{
_series = <code for load Series from webService by base.NomenklatureId>
}
return _series;
}
}
}
然后在 DbContext 中将 Person 类更改为 PersonProxy 类。
public class ProductContext:DbContext
{
...
public DbSet<PersonProxy> Person {get; set;}
...
}
加载方法:
public List<Person> GetPersons()
{
using (var ctx = new ProductContext())
{
var persons = ctx.Person.AsEnumerable().Cast<Person>().ToList();
return persons;
}
}
问题:这是在没有 AsEnumerable().Cast() 的情况下实现 GetPersons 方法的更好方法吗?这是用后代代理类型更改实体类型的另一种方法吗?