EF Code First外键问题

时间:2012-04-21 18:13:40

标签: c# entity-framework ef-code-first

我使用EF Code First映射到现有的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))

我想使用流畅的映射来创建关系。如果我这样做:

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

...我收到一条错误消息,指出密钥与主密钥不匹配。关于如何设置的想法?谢谢。

修改

好的,EF本身不支持此功能。是否存在延迟加载数据的变通方法?

这是只读的,如果这有所不同。

1 个答案:

答案 0 :(得分:1)

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

我不确定您是否可以在DB2中定义此类关系而不将ServiceDateFormNumber标记为唯一键(在这种情况下,没有理由在PK中使用Type同样)但你肯定无法在SQL服务器中定义它,这是EF的蓝图。无论如何,EF目前不支持形成关系的唯一键。