首页 > 解决方案 > EF Fluent API 是否允许将可选的非标准 FK 映射到非标准主键或使用非标准投影

问题描述

问题:我正在使用遗留代码,并且我正在尝试引入一个相关实体,该实体在一个表中的 Code 列和一个单独的 Code 表之间具有松散定义的关系。注意:没有配置外键,并且引用基于基于字符串的“代码”而不是主键。

我目前正在失去宝贵的开销,因为没有暗示这种关系,我基本上不得不将这种关系侧载到主模型中。拥有成千上万的收藏品,必须实现它的成本很高

一个例子:

public class Problem
{
    int Id
    string ProblemName
    string ProblemCode  <<< this is the foreign key dependency
}

public class Code 
{ 
    int Id
    string Code <<< this is the pseudo-primary key 
    string CodeDescription    
}

可能的解决方案 2:模型绑定我已经通过实体框架文档进行了挖掘,并且我知道可以设置一个唯一的外键约束,除了在每种情况下,据我所知,它总是引用显式主键主要的。

问题 1:EF Fluent API 是否允许将可选的非标准 FK 映射到非标准主键

可能的解决方案 2:在上下文调用中加载相关实体这是不太理想的方法,但我目前正在探索这个,使用 foreach 以这种方式填充松散连接的实体。不幸的是,使用 Select 将其投影到现有组合中不起作用,因为实体是(叹气)变体子实体,查询调用是抽象父实体(EF 实体是“问题”,但 Select 需要类似“汽车问题”)。

问题 2:在不使用 SELECT 投影的情况下分配实体的推荐解决方案(我认为目前不存在)

标签: c#entity-frameworklinqentity-framework-6

解决方案


EF Fluent API 是否允许将可选的非标准 FK 映射到非标准主键

是的。EF不关心真正的PK是什么。当然,强烈建议在数据库中使用唯一索引。但是在 EF 中,只需将您想要的任何键标记为实体键,您就可以将其用于导航属性。

例如

public class Code 
{ 
    int Id {get;set;}
    [Key]
    string Code {get;set;}
    string CodeDescription  {get;set;}
}

EF Core 支持备用键,但在 EF 6 中,每个实体类型只能有一个键。


推荐阅读