[英]Entity Framework 6 optional one way relation
我有两张桌子:
Client
------------------------
Id (string) <-- PrimaryKey
Name (string)
Number (int)
Department:*
------------------------
Id (int) <-- Primary key
Name (string)
ClientNumber (int?)
Client (Client, virtual)
.....
现在我想创建一个从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)
使用Linq中的连接很容易做到这一点,但它只是:
dbContext.Departments.Include(d => d.Client)
在包含客户端的Department类上使用虚拟属性(如果有)
对不起,这是不可能的。 EF中的Valide关系必须在数据库中也有效,换句话说,依赖表必须引用主表中的唯一标识符。 否则,系统无法确保每个部门最多只有一个客户端。
作为解决方法,您是否可以添加ClientId和ClientNumber属性? 确保Client不为null后,您可以从虚拟Client属性访问ClientNumber:
public class Client
{
public string Id { get; set; }
public string Name { get; set; }
public int Number { get; set; }
}
public class Department
{
public int Id { get; set; }
public string Name { get; set; }
public string ClientId { get; set; }
public virtual Client Client { get; set; }
[NotMapped]
public int? ClientNumber {
get {
return Client != null ? Client.Number : null;
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.