我有四个型号..用户,帖子,标签,评论......我想先与EF代码建立的关系是
1)1个用户可以有很多帖子,可以创建很多标签,可以有很多评论 2)1个帖子可以有1个用户,很多评论,并且可以有很多标签 3)1个标签可以有1个用户,很多帖子 4)1条评论可以有1个用户,1个帖子
通过谷歌,我已经走到了这一步......但我相信它不对......请帮助.. modelBuilder.Entity<User>().HasMany(p => p.Posts).WithRequired(u => u.Users);
modelBuilder.Entity<User>().HasMany(t => t.Tags).WithRequired(u => u.Users);
modelBuilder.Entity<User>().HasMany(c => c.Comments).WithRequired(u => u.Users);
modelBuilder.Entity<Post>().HasRequired(u => u.Users);
modelBuilder.Entity<Post>().HasMany(t => t.Tags).WithMany(p => p.Posts);
modelBuilder.Entity<Post>().HasMany(c => c.Comments);
modelBuilder.Entity<Comment>().HasRequired(u => u.Users);
modelBuilder.Entity<Comment>().HasRequired(p => p.Posts);
modelBuilder.Entity<Tag>().HasRequired(u => u.Users);
modelBuilder.Entity<Tag>().HasMany(p => p.Posts).WithMany(t => t.Tags);
请帮忙。
答案 0 :(得分:2)
如果一个用户可以拥有多个帖子而帖子可以拥有单个用户,那么您的实体和映射必须为此做好准备。
public class User
{
...
public virtual ICollection<Post> Posts { get; set; }
}
public class Post
{
...
public virtual User { get; set;}
public virtual ICollection<Tag> { get; set; }
}
public class Tag
{
...
public virtual ICollection<Post> Posts { get; set; }
}
如果您正确定义了实体,它应该使用默认约定为您进行正确的映射。如果您仍然使用流畅的API映射它,则必须使用:
modelBuilder.Entity<User>().HasMany(u => u.Posts).WithRequired(p => p.User);
这意味着一个用户可以有很多帖子,帖子必须有单个用户。那是1-N映射。对于标签和帖子,您需要M-N映射:
modelBuilder.Entity<Tag>().HasMany(t => t.Posts).WithMany(p => p.Tags);
这意味着一个标签可以有很多帖子,帖子可以有很多标签。
您将以相同的方式映射其他关系。