在实体框架中遇到关系问题。
我找到了类似的帖子:Entity Framework Entity w/ One-to-Many and One-to-One?
但它没有回答我的问题。
我想要完成的是两个实体之间的关系,它们具有一对多关系和一对一/可选。
这是代码:
public class User
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int UserId { get; set; }
public string Username { get; set; }
[Required]
public int GroupID { get; set; }
[ForeignKey("GroupID")]
public virtual Group Group { get; set; }
}
public class Group
{
[Key]
public int ID { get; set; }
public string Name { get; set; }
[Required]
public int GroupAdminID { get; set; }
[ForeignKey("GroupAdminID")]
public virtual User GroupAdmin { get; set; }
[ForeignKey("UserId")]
public virtual List<User> Members { get; set; }
}
这些与这个流畅的API代码相关联:
modelBuilder.Entity<User>().HasRequired(u => u.Group).WithMany(g => g.Members);
modelBuilder.Entity<Group>().HasRequired(g => g.GroupAdmin).WithOptional();
该组可以有多个成员,但只有一个管理员。用户连接到一个(且只有一个)组时。
我显然搞砸了一些东西,因为在我的脑海中这应该有用。
如果有人可以提供帮助,我会很感激。
问候,罗宾
答案 0 :(得分:0)
单独使用Entity Framework,您无法强制执行GroupAdmin需要在您的成员列表中的规则(如果您想要LazyLoading,则应该按照ICollection的类型)
这些规则不应驻留在持久层中,它们属于某种业务层,您可以在其中指定Memebers列表中未包含GroupAdmin的Group无效。
答案 1 :(得分:0)
public class User
{
public User()
{
Groups = new List<Group>();
}
public virtual ICollection<Group> Groups { get; set; }
....
}
public partial class Group
{
public Group()
{
Members = new List<User>();
}
public virtual ICollection<User> Members { get; set; }
....
}
modelBuilder.Entity<User>()
.HasRequired(u => u.Group)
.WithMany(u => u.Members)
.HasForeignKey(u => u.GroupID);
modelBuilder.Entity<Group>()
.HasRequired(g => g.GroupAdmin)
.WithMany(g => g.Groups)
.HasForeignKey(d => d.GroupAdminID);