EntityFramework 4.1:同一个表的多个专家类

时间:2011-06-20 11:39:33

标签: c# entity-framework database-design

因此我工作的应用程序当前使用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,以便通过更强大的类型强制执行更流畅的编码?

1 个答案:

答案 0 :(得分:0)

EF对此不会帮助您。它可以帮助您通过每个层次结构继承表将常规订阅映射到专用类型(但Linq-to-sql也可以这样做),但它不允许您将相关实体映射为派生订阅类型的参数。它需要自定义数据库视图和存储过程进行修改。