实体框架6可选的单向关系

sti*_*net 15 c# entity-framework-6

我有两张桌子:

Client
------------------------
Id           (string) <-- PrimaryKey
Name         (string)
Number       (int)

Department:*
------------------------
Id           (int) <-- Primary key
Name         (string)
ClientNumber (int?)
Client       (Client, virtual)
.....
Run Code Online (Sandbox Code Playgroud)

现在我想创建一个从Departmant到Client的可选关系(使用ClientNumber).我在Department类(Client)中创建了一个虚拟属性,现在我需要使用EntityTypeConfiguration配置关系.

数据库中没有配置外键,我无法更改数据库.我也无法更改实体(类)客户端.

所以我需要告诉EntityFramework,Department类中的ClientNumber(可选)与Client类中的Number属性相关.

但我无法弄清楚如何告诉EF部门的ClientNumber与客户的号码属性相关,而不是客户的主键.(不更改客户端实体类)

编辑:客户端上的Number属性对于每个条目都是唯一的.

该关系应该导致这样的sql语句:

SELECT .....
FROM Department D LEFT OUTER JOIN Client C ON (D.ClientNumber = C.Number)
Run Code Online (Sandbox Code Playgroud)

使用Linq中的连接很容易做到这一点,但它只是:

dbContext.Departments.Include(d => d.Client) 
Run Code Online (Sandbox Code Playgroud)

在包含客户端的Department类上使用虚拟属性(如果有)

gre*_*iss 0

抱歉,这是不可能的。EF 中的有效关系在数据库中也必须有效,换句话说,从属表必须引用主体表中的唯一标识符。否则系统无法保证每个部门最多有一个客户。

  • 不完全正确。该关系应引用 EF *知道*作为主键的属性。它可以是“Client.Number”,但该属性应该定义为模型中的主键。EF 7 将支持备用键。 (2认同)