1

我想利用 .NET 的数据框架,但我对它们的工作方式有点困惑,我不确定我想要的是否可行。(我已经用 PHP 框架完成了很多工作,所以我希望 .NET 也能做到这一点!)简而言之,我希望我的业务逻辑与数据库无关,并且在某种意义上,与以下事实无关它根本就是一个数据库。

像这样的查询让我很恼火:

var productNames =
    from p in context.Products
    where seller.SellerID == mySeller.SellerID
    select p.Name;

相反,我想做:

var productNames =
    from p in context.Products
    where seller == mySeller
    select p.Name;

本质上,我希望我的业务逻辑不关心ID 映射。部分原因是因为在一些表中,ID 具有真正的意义。(我正在使用的一些表是从另一个应用程序域导入的,我需要能够直接使用这些 ID,但对于我自己的类型,ID 是偶然的。)

这是示例中的一个小问题,但总的来说,我希望能够完全在对象的世界中工作,并且或多或少地忘记底层数据库的现实。这只是为我的类定义等价运算符的问题吗?

总结:什么 .NET 数据框架为我提供了对象世界最干净的数据库抽象?

4

2 回答 2

5

如果产品和卖家之间存在关系(我不知道您的代码示例中的卖家是什么),那么 EF 让您执行 p.Seller(或者 p.Sellers,如果每个产品可以有多个卖家)。

但这似乎无助于您想做的事情。seller == mySeller一点都不清楚。什么决定了平等?通常,您有一个主键来建立相等性。因此比较 ID 仍然有意义。此外,它通常也更有效率。

另一种选择是重载==运算符。这允许您编写一个比较 ID 的方法,该方法对操作员的用户不可见。但是,这可能会或不会在您的查询中起作用,因为它无法转换为 SQL。

于 2012-05-03T16:35:07.780 回答
3

如果您只是尝试比较对象而不必使用属性,则可以在类中覆盖Equals。然而,这是一个坏主意,因为它隐藏了正在发生的事情的逻辑。我强烈反对

于 2012-05-03T16:36:40.270 回答