什么.NET数据模型可以让我忘记ID

本文关键字:忘记 ID NET 数据模型 什么 | 更新日期: 2023-09-27 18:33:09

我想利用.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 数据框架为对象世界提供了最干净的数据库抽象?

什么.NET数据模型可以让我忘记ID

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

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

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

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