【问题标题】:How do I put business logic in my ADO.NET Entity Framework classes?如何将业务逻辑放入我的 ADO.NET Entity Framework 类中?
【发布时间】:2008-11-04 16:22:00
【问题描述】:

我想使用 ADO.NET Entity Framework 进行数据访问,为我的业务逻辑扩展它的对象,并将这些对象绑定到我的 UI 中的控件。

the answers to another question 中所述,我无法使用部分类扩展 ADO.NET Entity Framework 对象并在 LINQ 查询中使用我的自定义方法。

ADO.NET Entity Framework partial class http://img221.imageshack.us/img221/7329/clientsq0.gif

我不希望 Intellisense 中出现会产生运行时错误的方法!我应该如何构建我的应用程序以避免这个问题?

VB.NET LINQ with custom method http://img83.imageshack.us/img83/1580/iswashingtongn0.gif

我需要一个数据访问客户端类和一个业务逻辑客户端类吗?这似乎会让人感到困惑。

【问题讨论】:

    标签: .net linq entity-framework linq-to-entities


    【解决方案1】:

    您可以使用(普通旧 C# 对象)POCO 和管理器来构建您的解决方案。

    这样您就可以将业务逻辑与值对象分开。

    为了让它“看起来漂亮”,您可以在参数上使用 (this) 修饰符标记您的方法,这样您就可以将这些方法用作扩展方法。

    一个例子可以很清楚地说明这一点:

    位置值对象:

    public class Location
    {
        public string City { get; set; }
        public string State { get; set; }
    }
    

    位置经理:

    public static class LocationManager
    {
        public static bool IsWashington(this Location location)
        {
            return location.State == "WA";
        }
    }
    

    现在,扩展方法的显示方式将不同于对象上的标准属性/方法。

    “IsWashington”方法有两种调用方式

    Location location = new Location { State = "WA" };
    LocationManager.IsWashington(location);
    

    Location location = new Location { State = "WA" };
    location.IsWashington();
    

    现在您已经分离了业务逻辑和值对象,但您仍然可以进行“漂亮”的方法调用。

    如果您觉得您的开发人员(或您 :))会滥用扩展方法部分,请不要使用它。

    【讨论】:

      【解决方案2】:

      我也使用实体框架并首先尝试扩展类,但我很快发现这不是一个好的解决方案,所以我最终创建了新的类(在一个新的类库中),我以 B 为前缀。我没有扩展实体类。

      如果我有一个名为 NewsPost 的类,则该业务类名为 BNewsPost,并且与该类相关的所有业务逻辑都在这里收集。用于连接用于放置逻辑的返回元素。

      不是一个非常令人兴奋的解决方案,但它成功了。

      问候

      【讨论】:

        猜你喜欢
        • 2013-10-27
        • 1970-01-01
        • 2014-02-14
        • 2013-11-29
        • 2020-06-29
        • 1970-01-01
        • 2011-04-02
        • 2011-01-30
        • 1970-01-01
        相关资源
        最近更新 更多