实体框架和业务对象
Posted
技术标签:
【中文标题】实体框架和业务对象【英文标题】:Entity Framework And Business Objects 【发布时间】:2011-07-09 08:03:06 【问题描述】:我以前从未使用过实体框架,我想尝试一些个人项目来实现它以使我的脚湿透。
我看到实体可以暴露给表示层。 但我不希望暴露某些字段,例如修改日期和创建日期等字段以及各种其他数据库字段。
如何实现业务对象并只公开我需要的属性但仍保持对象可序列化?
另外这比 LinqToSql 有什么优势?
【问题讨论】:
【参考方案1】:您只需将所需的属性绑定到表示层,这可以通过声明、业务逻辑层(具有自己的对象抽象级别)或您的 ViewModel 来完成。
【讨论】:
是的。我很想成为这方面的一个小例子。【参考方案2】:当您在 EDMX 模型中定义实体时,您可以指定每个属性的 setter 和 getter 的可见性,因此如果您不希望 ModifiedDate 在其他层中可见,您只需将其指定为内部即可。
如果您的要求更复杂,例如 ModifiedDate 应该在实体程序集和业务逻辑程序集中但不能在 UI 程序集中访问,那么您需要创建另一个对象,该对象将在业务逻辑和 UI 逻辑之间交换层。
【讨论】:
@Robert:你期望什么样的样本? 如何指定每个属性的getter和setter的可见性? @Robert:我希望这张图片是自我描述的。 解释它需要做很多工作,非常感谢。我喜欢这个主意。我想设置所有这些需要做很多工作,但仍然比为 eash 实体编写 bll 少很多。 如何为实体属性添加验证?是否可以在另一个项目中分离此验证?【参考方案3】:个人在实体上使用包装类并公开或隐藏我需要的内容。
// 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;
【讨论】:
这听起来像我想要的。这个可以轻松序列化吗? 是的,只需将您的BLL
类标记为serializable
并遵守规则即可。我正在考虑这个解决方案一段时间,这对我有用。我更喜欢这个,因为你可以在一个独立的项目中声明它,并且不要在实体项目中添加任何partial class
(在我的例子中,每个项目都有两个不同的团队工作)。这个解决方案有一些技巧,比如创建两个构造函数,一个无参数,另一个接受实体对象...【参考方案4】:
// this is your edmx
Asset5Entities conx = new Asset5Entities();
// 认为这是一个联系人的新对象列表,它是数据库中的一个表 //使用实体框架将此数据库表映射到一个对象供你处理
List$gt;Contact$lt; s = new List$gt;Contact$lt;();
//使用大量的 LINQ,你现在可以选择或查询你数据库中的任何表,你有 // 在此处访问该表示例(电子邮件)中的列
var result = from q in conx.Contacts select q.Email;
// 而不是
string sqlcommand = "select email from Contacts";
Contact con = new Contact();
con.Email= "xxxx@gmail.com";
con.FirstName="nader";
//etc etc...
conx.Contacts.AddObject(con);
//rather than " insert into Contact values ......................"
//having your queries within ur c# code rather than strings that are not parsed //for errors but on runtime was alot helpful for me
【讨论】:
以上是关于实体框架和业务对象的主要内容,如果未能解决你的问题,请参考以下文章