如何将业务逻辑放入我的ADO.NET Entity Framework类中?

4

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

另一个问题的答案中所解释的那样,我无法使用局部类来扩展ADO.NET Entity Framework对象并在LINQ查询中使用自定义方法。

ADO.NET Entity Framework局部类 http://img221.imageshack.us/img221/7329/clientsq0.gif

我不希望出现会导致运行时错误的Intellisense方法! 我该如何设计我的应用程序以避免这个问题?

VB.NET LINQ自定义方法 http://img83.imageshack.us/img83/1580/iswashingtongn0.gif

我需要一个数据访问客户端类和一个业务逻辑客户端类吗?看起来这会变得很混乱。

2个回答

2

您可以使用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);

OR

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

现在你已经将业务逻辑和值对象分离,但仍然可以进行“优美”的方法调用。
如果你觉得你的同事(或你自己 :) )会滥用扩展方法部分,那就不要使用它。

1

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

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

虽然不是非常令人兴奋的解决方案,但它确实解决了问题。

敬礼


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接