我的团队正在使用 Entity Framework 4.3.0 - Code Only 和 POCO 类作为我们的 ORM。现在我们使用 DBSets of Classes 来访问我们的“表”
Public Property Customers As DbSet(Of Customers)
但是我们经常根据 LINQ 中的 IsDeleted 列进行软删除,并相应地过滤我们的选择语句:
Dim LiveCustomers =
From C In EM.Customers
Where C.DeleteFlag = False
我真正想做的是,而不是编写每个查询来包含此过滤器,而是创建一些提供过滤集的较低级别的属性(可能在我们继承的 DbContext 级别),同时保持强类型。
我试过这个:
Public Property Customers As DbSet(Of Customer)
Public Property Customers_Live As DbSet(Of Customer)
Get
Return From C In Customers
Where C.DeleteFlag = False
End Get
Set(value As DbSet(Of Customer))
Customers = value
End Set
End Property
然而,这给了我这个错误:
不支持每种类型的多个对象集。对象集“Customers”和“Customers_Live”都可以包含“ _ _.Customer”类型的实例。
对谷歌的快速检查产生了这个有希望的结果(如何:使用每种类型的多个实体集查询对象)但是在更新我的连接字符串之后,我仍然遇到同样的错误。
<add name="EntityManager"
providerName="System.Data.SqlClient"
connectionString="
Data Source=xxxxxx;
Initial Catalog=xxxxxx;
User Id=xxxxxx;
Password=xxxxxx;
MultipleActiveResultSets=True"/>
所以我的问题是,我怎样才能有效地创建一个允许我应用过滤的 LINQ 视图,而不会对上游使用产生太大影响?