Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 实体框架与非关键字段的关联_Entity Framework - Fatal编程技术网

Entity framework 实体框架与非关键字段的关联

Entity framework 实体框架与非关键字段的关联,entity-framework,Entity Framework,是否可以在实体框架中创建associates b/t 2非关键字段 示例:以旧版应用程序中的两个表为例(即键/结构不能更改) 在实体框架中,我希望通过OrderNo字段创建关联b/tOrder和OrderDetails,该字段不是表或数据库中FK关系的主键 在我看来,这不仅应该很容易做到,而且也是使用EF这样的工具的原因之一。但是,它似乎只允许我使用实体键创建关联。使用非键字段定义关系的问题是,不能保证键可以正确导航。这可能会导致两个实体之间存在一对一关系,其中有多个可能的行填充该关系 …当关联

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

示例:以旧版应用程序中的两个表为例(即键/结构不能更改)

在实体框架中,我希望通过
OrderNo
字段创建关联b/t
Order
OrderDetails
,该字段不是表或数据库中FK关系的主键


在我看来,这不仅应该很容易做到,而且也是使用EF这样的工具的原因之一。但是,它似乎只允许我使用实体键创建关联。

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


…当关联数据库中的数据时,关系应始终基于键。键强制引用完整性。

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

这是因为SSDL(EDMX的StorageModel部分)可以在必要时由您操作并对数据库撒谎

EF随后将与数据库交互,就好像密钥和外键确实存在一样

这应该是可行的,但是所有关于引用完整性的常规警告都适用

看我的

希望这有帮助。

还有一个解决方法:

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


现在您将能够创建关联

问题是它是否允许关联。假设我100%确定不会发生这种情况……EF是否允许我建立关系,即使这显然不是良好的做法?+1这是否意味着我必须手动编辑thge.edmx文件?再次感谢。最后一个问题。如果我确实编辑了EDMX,那么当我想使用向导更新模型时,它将如何工作?我的自定义更改是否会被持久化?或者,一旦我开始“编辑EDMX”路线,我是否被迫手动进行所有更改?不幸的是,当您从数据库刷新模型时,EDMX的SSDL部分中的更改会被覆盖。因此,是的,您需要再次进行更改。但是,如果您使用这些工具使用设计器修改概念模型,则不应触及自定义SSDL位。
Order (
    OrderId : int : PK
    OrderNo : varchar
)

OrderDetails (
    DetailRecordId : int : PK
    OrderNo : varchar
)