有两个实体:
“其他”人设计在后端,没有任何组。 (空)
Yuvak - 人总会有一个家庭组。 (1 => 1)并且没有任何组可以控制。
Nirikshak(负责人) - 人总是有一个家庭组。 (1 => 1)但他也将有多个组来控制 - GroupsOfNirikshak。 (1 =>许多)
一个小组将有多个Yuvaks(1 =>多个)
所有团体大多只有一个团长。 (最初一个新组可能没有任何头,但零或多个yuvaks人。)
[Table("Group")]
public class Group
{
[Key]
public int Id { get; set; }
.....
public virtual List<Yuvak> Yuvaks { get; set; }
[ForeignKey("Nirikshak")]
public int? NirikshakId { get; set; }
public virtual Yuvak Nirikshak { get; set; }
}
[Table("Yuvak")]
public class Yuvak
{
[Key]
public int Id { get; set; }
.....
[ForeignKey("HomeGroup")]
public int? HomeGroupId { get; set; }
public virtual Group HomeGroup { get; set; }
public virtual List<Group> GroupsOfNirikshak { get; set; }
}
我已经在两个实体中为1 =&gt; 1个关系(可为空)提供了两个外键。 现在要管理多对多的关系,如果它们不为空,它应该自动创建一个带有“Yuvak_Id”和“Group_Id”列的第三个表。但是在这里,FK是空的;而不是创建第三个表,它在两个表中添加一个外键列。(组:“Yuvak_Id”和Yuvak:“Group_Id”)
我应该怎么做才能维护Yuvak-HomeGroup它应该只使用上面提供的外键和多对多关系(Head-GroupsOfNirikshak&amp; Group-Yuvaks)它应该创建一个单独的表。
我可以为多对多关系创建一个单独的表,例如:(ID,YuvakID,GroupID)我该怎么做?
我试图这样做,但得到了不同的错误,如下所示:
.....
等等。
答案 0 :(得分:1)
使用“Fluent Api”!
在你的上下文类中写(例如):
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Group>()
.HasOptional(t => t.Nirikshak)
.WithMany(t => t.GroupsOfNirikshak)
.HasForeignKey(t => t.NirikshakId);
}
答案 1 :(得分:0)
您可以删除类和属性上的注释。一旦在另一个上有基于模型的类,Entity Framework将自动在其上创建外键关系。它将Yuvak作为Group Graph对象的节点进行处理。您无需声明注释,因为EF会自动为您执行此操作。