如何创建LINQ视图?
我的团队正在使用Entity Framework 4.3.0—代码仅与POCO类一起作为我们的ORM。现在我们使用类的数据库集来访问我们的“表”如何创建LINQ视图?,linq,entity-framework,entity-framework-4.1,entity-framework-4.3,Linq,Entity Framework,Entity Framework 4.1,Entity Framework 4.3,我的团队正在使用Entity Framework 4.3.0—代码仅与POCO类一起作为我们的ORM。现在我们使用类的数据库集来访问我们的“表” Public Property Customers As DbSet(Of Customers) 但我们通常基于LINQ中的IsDeleted列进行软删除,并相应地过滤select语句: Dim LiveCustomers = From C In EM.Customers Where C.DeleteFlag = False 我真正
Public Property Customers As DbSet(Of Customers)
但我们通常基于LINQ中的IsDeleted列进行软删除,并相应地过滤select语句:
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\u Live”都可以包含“Customer.Customer”类型的实例。
对google的快速检查产生了这个有希望的结果(),但是在更新了我的连接字符串之后,我仍然得到了相同的错误
<add name="EntityManager"
providerName="System.Data.SqlClient"
connectionString="
Data Source=xxxxxx;
Initial Catalog=xxxxxx;
User Id=xxxxxx;
Password=xxxxxx;
MultipleActiveResultSets=True"/>
所以我的问题是,我如何才能有效地创建一个LINQ视图,允许我应用过滤,而不会对上游的使用产生太大的影响?像这样更改您的属性:
Public Property Customers As DbSet(Of Customer)
Public Property Customers_Live As IQueryable(Of Customer)
Get
Return From C In Customers
Where C.DeleteFlag = False
End Get
End Property
这略有不同,因为您不会有类似于
Add()
或Remove()
的功能,但对于视图,您通常不希望有这种功能。如果要添加或删除一个新类,则应使用普通的客户属性。您可以让您的POCO类继承自一个新类,该类具有一个新方法,可以为您执行筛选。向新类中添加类似的内容
--伪代码--
你可以这样称呼它:
Dim LiveCustomers=
从EM.Customers.Filtered中的C
或者,您可以创建一个接口,并在调用linq查询时进行依赖性注入。你必须在谷歌上搜索这个:)我喜欢这个主意,但我认为它实际上行不通。您需要创建一个从DBSet(Of Customer)继承的类。很确定这是不可能的。它创建了一个设计时错误,关于DbSet没有可公开访问的“Sub-New”
Public Function Filtered() as IEnumerable(Of Out T)
Return (From x In Me Where x.DeleteFlag).ToList()
End Function