4

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

正如另一个问题的答案中所解释的,我无法使用部分类扩展 ADO.NET 实体框架对象并在 LINQ 查询中使用我的自定义方法。

ADO.NET 实体框架部分类 http://img221.imageshack.us/img221/7329/clientsq0.gif

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

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

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

4

2 回答 2

2

您可以使用(普通旧 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();

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

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

于 2008-11-04T16:31:04.543 回答
1

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

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

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

问候

于 2008-11-10T15:31:43.647 回答