C# EF代码第一外键问题

C# EF代码第一外键问题,c#,entity-framework,ef-code-first,C#,Entity Framework,Ef Code First,我首先使用EF代码映射到现有的DB2数据库。这是一种一对多关系,不幸的是,我无法轻松创建视图或更改模式 父表的架构具有以下键: Type (char(1)) ServiceDate (datetime) FormNumber (varchar(8)) 子表(详细信息)具有以下键 ServiceDate (datetime) (also a foreign key to ServiceDate on the parent table) FormNumber (varchar(8)) (

我首先使用EF代码映射到现有的DB2数据库。这是一种一对多关系,不幸的是,我无法轻松创建视图或更改模式

父表的架构具有以下键:

 Type (char(1))
 ServiceDate (datetime)
 FormNumber (varchar(8))
子表(详细信息)具有以下键

 ServiceDate (datetime) (also a foreign key to ServiceDate on the parent table)
 FormNumber (varchar(8)) (also a foreign key to ServiceDate on the parent table)
 SpecificServiceDate (datetime)
 LineNumber (varchar(8))
我想使用fluent映射来创建关系。如果我这样做:

 .HasMany(e => e.Details).HasForeignKey(e => new {e.ServiceDate, e.FormNumber});
…我收到一个错误,说密钥与主键不匹配。关于如何建立这个的想法?谢谢

编辑

好的,EF本机不支持这个。是否存在延迟加载数据的解决方法


这是只读的,如果有区别的话

不幸的是,这是不可能的。EF中的关系具有与数据库中相同的规则。如果父表的主键中有三列,则从属表的外键中必须有相同的三列


我不确定您是否可以在DB2中定义这种关系,而不将
ServiceDate
FormNumber
标记为唯一键(在这种情况下,PK中也没有理由有
Type
),但您肯定不能在SQL server中定义它,这是EF的蓝图。无论如何,EF目前不支持形成关系的唯一键。

我甚至不确定这将如何工作。如果您有FormNumber=1、ServiceDate=1/1/2013、Type=a和FormNumber=1、ServiceDate=1/1/2013、Type=B,会发生什么情况?详细信息无法唯一地选择哪个记录是它的父记录。我不相信DB/2会在没有唯一标识的情况下允许这种外键关系。这是一个旧的AS400系统,主表实际上是一个联合视图,外键比其他任何东西都更常规。不好玩-(EF也不太支持视图。特别是,EF会将任何不可为空的字段视为复合主键的一部分。您可能无法在此处创建关系。