我使用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本身不支持此功能。是否存在延迟加载数据的变通方法?
这是只读的,如果这有所不同。
答案 0 :(得分:1)
不幸的是,这是不可能的。 EF中的关系与数据库中的规则相同。如果父表在主键中有三列,则从属表在外键中必须具有相同的三列。
我不确定您是否可以在DB2中定义此类关系而不将ServiceDate
和FormNumber
标记为唯一键(在这种情况下,没有理由在PK中使用Type
同样)但你肯定无法在SQL服务器中定义它,这是EF的蓝图。无论如何,EF目前不支持形成关系的唯一键。