实体框架中没有外键的一对多关系

本文关键字:一对多 关系 框架 实体 | 更新日期: 2023-09-27 17:51:22

标题可能会误导人,但现在我似乎找不到合适的词来表达我正在搜索的内容。

实体A有许多实体B, 但是实体B将包含实体A的外键。

这是如何工作的?

起初,我想在我的模型中使用以下属性。

public virtual ICollection<B> Bs { get; set; }

但那是如果B有a的外键。建议?或者这不是一件事?如果B没有外键,我必须创建一个单独的模型来关联a和B吗?

实体框架中没有外键的一对多关系

我不知道为什么实体B上不能有一个FK到实体A,但是没有任何类型的参考约束,两个实体之间就没有遍历(即你不能提取每个给定A的所有B,你不能提取给定B的A)。我可以告诉你的最简单的方法就是添加FK,但如果不可能,你需要创建另一个实体,它只是作为实体B的代理/映射。BProxy实体应该与B实体有1-1的关系。

public class BProxy 
{
     [Key]
     public int Id {get; set;}
     [Required]
     public int EntityBId {get; set;}
     public virtual EntityB {get; set;}
     [Required]
     public int EntityAId {get; set;}
     public virtual EntityA {get; set;}
}

你的实体A将有一个BProxy对象的集合而不是B对象

public virtual ICollection<BProxy> BProxies { get; set; }

这样,您就可以通过LINQ创建遍历关系的查询。