因此我工作的应用程序当前使用Linq2SQL并将类1-1映射到数据库模式。这通常是现实的,但对于DB的某个区域来说不方便。我正在尝试EntityFramework 4.1并看看我是否可以为这个给定区域获得更自然的强类型映射。
<小时/> 该区域看起来有点像这样(每个表都有一个Guid-uniqueidentifier用于每行的ID):
tblSubscription [有一个服务,有许多SubscriptionParameters]
- fkService(Guid)
tblService [有许多订阅,有很多ServiceParameters]
- sServiceType(String)
tblSubscriptionParameter [有一个订阅,有一个ServiceParameter]
- sValue(String - 通常是int或bool的字符串表示形式)
- nIndex(Int - 对应于相同服务参数的多个值)
- fkServiceParameter(Guid)
tblServiceParameter [有一个Service,有许多SubscriptionParameters]
- sName(String)
- fkService(Guid)
var allTestParams = ...SecretSubscriptions.Select(s => s.TestParameter)
而不是使用Linq2SQL我必须遵循的相当丑陋的模式:
var allTestParams = ...Subscriptions.Where(s => s.Service.Name == "SecretService")
.Select(s => s.SubscriptionParameters.First(sp =>
sp.ServiceParameter.Name == "TestParameter").Value);
<小时/> 所以我希望有一些专门的订阅类继承自某些基本订阅类,这些订阅类明确地键入它们所属的服务类型,并具有可以获取和设置为指定的SubscriptionParameters的属性。与此同时,我想使用一个通用订阅类,可以简单地访问某些应用程序的参数集合(例如审计),这些应用程序将与参数进行交互,而不必真正关心它们所代表的内容。
如何配置EntityFramework,以便通过更强大的类型强制执行更流畅的编码?
答案 0 :(得分:0)
EF对此不会帮助您。它可以帮助您通过每个层次结构继承表将常规订阅映射到专用类型(但Linq-to-sql也可以这样做),但它不允许您将相关实体映射为派生订阅类型的参数。它需要自定义数据库视图和存储过程进行修改。