我以前从来没有使用过实体框架,我想尝试一些实现它的个人项目,以了解我的脚。
我看到实体可以向表示层公开。但我不希望暴露某些字段,如修改日期和创建日期等字段以及各种其他数据库字段。
如何实现业务对象并只公开所需的属性,同时仍然保持对象的可序列化?
另外,与LinqToSql相比,这有什么优势?
发布于 2011-03-05 17:21:32
在EDMX模型中定义实体时,可以指定每个属性的setter和getter的可见性,因此,如果不希望ModifiedDate在其他层中可见,只需将其指定为内部。
如果您的需求比较复杂,比如ModifiedDate应该可以在entities程序集和业务逻辑程序集中访问,但不能在UI程序集中访问,那么您需要创建另一个在业务逻辑和UI逻辑层之间交换的对象。
发布于 2011-03-06 06:43:37
我个人在实体上使用包装器类,并公开或隐藏我需要的东西。
// instead of below property in your BLL:
private int m_someVariable;
public int SomeVariable
{
get { return m_someVariable; }
set { m_someVariable = value; }
}
// You can use the entity object:
private readonly EntityClass _entityObject = new EntityClass();
public int SomeVariable
{
get { return _entityObject.SomeVariable; }
set { _entityObject.SomeVariable = value; }
}
// or make it read-only at your BLL
public int SomeVariable
{
get { return entityObject.SomeVariable; }
// set { entityObject.SomeVariable = value; }
}
发布于 2011-03-05 17:12:29
您只需将所需的属性绑定到表示层,这可以通过声明、业务逻辑层(具有自己的对象抽象层)或ViewModel来完成。
https://stackoverflow.com/questions/5202780
复制相似问题