2012-04-21 89 views
0

我使用EF代码首先映射到一个现有的DB2数据库。这是一对多的关系,不幸的是我不能轻松创建视图或更改架构。EF代码首先国外关键问题

父表的模式具有以下键:

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)) 

我想用流利的映射创建关系。如果我做的:

.HasMany(e => e.Details).HasForeignKey(e => new {e.ServiceDate, e.FormNumber}); 

...我得到一个错误说的密钥不匹配的主键。想法如何设置这个?谢谢。

编辑

OK,EF本身并不支持这一点。有没有一种解决方法来延迟加载数据?

这是只读的,如果有差别。

+1

我甚至不知道如何将工作。如果您有FormNumber = 1,ServiceDate = 1/1/2013,Type = A和FormNumber = 1,ServiceDate = 1/1/2013,Type = B,会发生什么?细节无法唯一地选择哪个记录是父项。我不能相信DB/2在它不是唯一标识的时候会允许这种外键关系。 – 2012-04-21 19:08:31

+0

这是关闭一个旧的AS400系统,主表实际上是一个UNION视图,并且外键比其他任何更常规。不好玩。 :-( – bryanjonker 2012-04-21 19:10:29

+1

EF并不支持视图,尤其是EF会将任何不可空的字段视为复合主键的一部分,您可能无法在此处创建关系。 – 2012-04-21 19:19:15

回答

1

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

我不知道,如果你可以定义DB2这样的关系中无标记ServiceDateFormNumber作为唯一键(在这种情况下,就没有任何理由要在PK Type为好),但你绝对不能把它定义在EF的蓝色打印SQL服务器。无论如何,EF目前不支持形成关系的唯一键。