【问题标题】:.NET Entity Framework.NET 实体框架
【发布时间】:2010-10-24 05:41:32
【问题描述】:

使用 Entity Framework 生成的对象作为业务对象是不好的做法吗?围绕 Entity Framework 对象编写一个辅助包装器,然后在层之间传递是否更好?

例如,编写我自己的 POCO Person 接受我生成的 Entity Framework 对象之一 EFPerson 来初始化 POCO Person 对象?

【问题讨论】:

  • 如果 EF 对象在序列化时出现问题,最好将它们包装在 POCO 中吗?因为您将来可能希望通过 WCF 公开您的 Biz 逻辑。

标签: .net database entity-framework .net-3.5


【解决方案1】:

虽然有些人倾向于将实体框架类包装到他们的业务对象中,但我通常建议不要这样做。

我知道这改进了业务逻辑和数据访问的分离,但我认为这通常不值得复制所有实体类型的开销。

OR 映射器的用途是什么?它是持久化业务对象,而不需要手动将对象映射到数据库的复杂数据访问层。如果你包装实体框架类,你将只使用获得的便利的一半。

最后,数据访问和业务逻辑之间的耦合在部分类中并不是那么紧密。不久前,我在几个小时内将一个涉及大约 30 个实体的项目从 Entity Framework 更改为 LINQ to SQL,没有出现重大问题。

【讨论】:

    【解决方案2】:

    我不明白为什么它会是 不好的 做法。根据您打算如何使用 EF 对象,这可能会很尴尬。

    我有部分类在 EF 对象中实现 BIZ 逻辑,使用接口来提供一定程度的抽象。

    例如。

    public partial class Client : IClient
    {
       void DoSomething();
    }
    
    // then an EF generated object ...
    public partial class Client
    {
     // ...
    }
    

    我遇到的唯一问题是序列化对象。就我而言,使用 WCF 序列化为 JSON。如果不将中间 DTO 创建为离散类/对象或匿名类型,这是不可能的。

    如果您对序列化感兴趣,请在此处查看我的另一个问题:Serialize Entity Framework objects into JSON

    【讨论】:

    • 如果需要 DTO,那么简单地使用 DTO 处理所有事情,然后在 DTO 上使用一些静态方法来与 EF 对象相互转换,这不是明智之举吗?
    • 我选择不这样做。 1/ 过多的工作和代码维护(即使使用代码生成工具)和 2/ 当我使用 DTO 时,我将它们用于不同的目的,主要用于 WCF 工作。对我来说,简单就是胜利!
    • 具有匿名类型的 DTO 是否可以在 JavaScript 之外的其他“客户端”上工作?我的主要用途是通过 WCF,我不了解客户端。
    • 我也不了解客户端,除了我假设它支持我提供的协议,在这种情况下是 JSON - 为简洁起见。 WCF 带有一个可以反序列化和序列化的 WCF 序列化程序,并且有足够的库来促进 JSON 解析,即使对于非 Web 客户端也是如此。
    • 您能否提供此类示例的链接?
    猜你喜欢
    • 2014-07-21
    • 2013-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-11
    • 2011-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多