我正在使用Microsoft的Entity Framework O / R映射器,并使用实体类(映射到DB对象的生成的类)作为业务对象。 这个可以吗?请说明你的缺点或专业人士。如何在业务层和表示之间进行WCF通信,如何将这些对象作为数据成员发送?
答案 0 :(得分:31)
答案 1 :(得分:20)
我以这种方式使用EF,一个很好的特性是生成的实体是部分类,允许它们以一种相当受保护的方式进行扩展,以防止再生问题。
另请参阅this link on MSDN,其中介绍了EF与业务逻辑相关的一些常见使用场景。
答案 2 :(得分:13)
Entity框架是为要用作业务对象的实体对象而设计的,但您应该记住,业务对象将与O / R技术以及EDM模型相关联。在EF 1.0中,没有任何对 persistence-ignorance 方案的支持,但在4.0中添加了支持。如果您不想使用任何基类,则可以实现interfaces。
从.NET 3.5 SP1开始,它们也应该可以作为参数并在WCF服务方法中返回类型,而无需任何其他代码。
答案 3 :(得分:4)
根据我的经验,我们在应用程序的业务层中使用了EF对象,但是当我们通过WCF服务层转换到表示层时,我们将从EF对象创建视图对象。
在我们的示例中,只将视图传递给表示层。我们这样做是为了控制数据的呈现方式,并对来自表示层的数据应用防御性验证。
在WCF事务中使用EF对象的情况下,您将丢失与EF对象关联的对象上下文。 CodePlex有一些努力试图帮助解决这个问题,但我没有跟上他们的努力。
答案 4 :(得分:4)
要了解我遇到的两个限制是:
继承的对象不能具有导航属性 - 即如果您有“人”类,然后是“客户”和“供应商”,那么这些客户和供应商都不能拥有导航属性。
方法和计算字段(部分类中的任何内容)不通过ADO.Net数据服务传输 - 如果您还使用ADO.Net数据服务,则在部分类中展开实体框架对象的任何内容都不会通过ADO.Net数据服务传输。
这些通常不是show-stopper项目(对于导航属性,我们暂时不在实体框架上使用继承),但可能是您自己感兴趣的东西。我希望将来的版本能够实现这两个项目。
答案 5 :(得分:3)
如果对象丢失了原始对象上下文,您是否可以重新附加对象? 您需要自己处理并发问题。
我不建议将EF对象用作WCF的DataContract对象,因为您将实体对象的实现强烈地绑定到Web服务客户端,将来很难做到更改,您计划的客户越多越难在拥有。
答案 6 :(得分:2)
WPF Application Framework (WAF) 的BookLibrary示例应用程序显示了如何将模型 - 视图 - 视图模型(MVVM)模式与实体框架结合使用。