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

Hen*_*iam 1 c# linq database abstraction entity-framework

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

像这样的查询会让我感到恼火:

var productNames =
    from p in context.Products
    where seller.SellerID == mySeller.SellerID
    select p.Name;
Run Code Online (Sandbox Code Playgroud)

相反,我想做:

var productNames =
    from p in context.Products
    where seller == mySeller
    select p.Name;
Run Code Online (Sandbox Code Playgroud)

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

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

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

Jon*_*ood 5

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

但这似乎没有帮助你想做什么.seller == mySeller一点也不清楚.什么决定平等?通常,您有一个主键来建立相等性.所以比较ID仍然有意义.此外,它通常也更有效.

另一种选择是使==操作员超载.这允许您编写一个比较ID的方法,这对于操作员的用户是不可见的.但是,这可能在您的查询中有效,因为它无法转换为SQL.