我正在努力解决一个问题,而且从我所看到的,所提出的解决方案都不起作用。
基本上我有两个班级:
public class Role
{
[Key]
public int ID { get; set; }
public string Name { get; set; }
public string Description { get; set; }
}
public class ActionType
{
public int ID { get; set;}
public string Name { get; set; }
public string Description { get; set; }
public virtual ICollection<Role> AllowedRoles { get; set; }
public ActionType()
{
this.AllowedRoles = new List<Role>();
}
}
我希望EF在DB中强制关联表,其中FK用于引用一对多关系。不知何故,代码首先为我的Role
创建一个表,其中添加了一列ActionType_ID
。当一个Role
添加更多ActionType
时,当然没用。正在播放DBUpdateExcpetion
。
有关如何解决这个问题的任何想法?关键是classe Role没有引用ActionType,因为这没用。
谢谢!
答案 0 :(得分:1)
你真的想做什么?目前,您可以向单个Role
添加更多ActionType
个,但单个Role
无法添加到多个ActionType
。你也想要吗?
在这种情况下,您不会进行一对多关联,而是多对多关联。只有多对多关系才使用联结(关联)表。一对多关系确实意味着依赖实体(多方面的实体)对主体实体具有FK。最简单的方法是在Role中定义导航属性:
public class Role
{
public int ID { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public virtual ICollection<ActionType> ActionTypes { get; set; }
}
public class ActionType
{
public int ID { get; set;}
public string Name { get; set; }
public string Description { get; set; }
public virtual ICollection<Role> AllowedRoles { get; set; }
}
如果您不想在Role中拥有导航属性,则必须使用流畅的API来描述关系。
public class Context : DbContext
{
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<ActionType>()
.HasMany(a => a.AllowedRoles)
.WithMany();
}
}