具有非关键字段的实体框架关联

时间:2009-11-11 20:32:35

标签: entity-framework

是否可以在实体框架中创建关联b / t 2个非关键字段?

示例:在遗留应用程序中获取2个表(即键/结构不能更改)

Order (
    OrderId : int : PK
    OrderNo : varchar
)

OrderDetails (
    DetailRecordId : int : PK
    OrderNo : varchar
)

在实体框架中,我想通过Order字段创建一个关联b / t OrderDetailsOrderNo,这不是表中的主键或FK关系在数据库中。

在我看来,这不仅应该容易做到,还应该使用像EF这样的东西。但是,似乎只允许我使用实体键创建关联。

3 个答案:

答案 0 :(得分:6)

实体框架允许您声明列是键,并且FK约束存在于数据库中实际不存在的位置。

这是因为必要时你可以操纵SSDL(EDMX的StorageModel部分)并且谎言关于数据库。

然后,EF将与数据库进行交互,就像密钥和外键确实存在一样。

这应该有效,但所有关于参照完整性的正常警告都适用。

查看我的Entity Framework Tips

希望这有帮助。

答案 1 :(得分:1)

使用非关键字段定义关系的问题是不能保证密钥可以正确导航。这可能导致两个实体之间存在一对一关系的情况,其中有多个可能的行来填充关系。

...在关联数据库中的数据时,关系应始终基于键。密钥强制执行引用完整性。

答案 2 :(得分:0)

还有一个解决方法:

创建视图vOrder,它不包含PK并从中创建实体。 将此实体中的PK设置为OrderNo

现在您将能够创建关联