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