是否可以在实体框架中创建关联b / t 2个非关键字段?
示例:在遗留应用程序中获取2个表(即键/结构不能更改)
Order (
OrderId : int : PK
OrderNo : varchar
)
OrderDetails (
DetailRecordId : int : PK
OrderNo : varchar
)
在实体框架中,我想通过Order
字段创建一个关联b / t OrderDetails
和OrderNo
,这不是表中的主键或FK关系在数据库中。
在我看来,这不仅应该容易做到,还应该使用像EF这样的东西。但是,似乎只允许我使用实体键创建关联。
答案 0 :(得分:6)
实体框架允许您声明列是键,并且FK约束存在于数据库中实际不存在的位置。
这是因为必要时你可以操纵SSDL(EDMX的StorageModel部分)并且谎言关于数据库。
然后,EF将与数据库进行交互,就像密钥和外键确实存在一样。
这应该有效,但所有关于参照完整性的正常警告都适用。
希望这有帮助。
答案 1 :(得分:1)
使用非关键字段定义关系的问题是不能保证密钥可以正确导航。这可能导致两个实体之间存在一对一关系的情况,其中有多个可能的行来填充关系。
...在关联数据库中的数据时,关系应始终基于键。密钥强制执行引用完整性。
答案 2 :(得分:0)
还有一个解决方法:
创建视图vOrder,它不包含PK并从中创建实体。 将此实体中的PK设置为OrderNo
现在您将能够创建关联