实体框架ICollection中的多个关系?

时间:2013-01-21 19:44:57

标签: c# sql-server entity-framework entity-framework-5

好的,所以在Entity Framework中我有两个类,

public class User
{
    public int ID { get; set; }
    public string Username { get; set; }
}
public class Post
{
    public int ID { get; set; }
    public string Contents { get; set; }
    public virtual ICollection<User> Likes { get; set; }
}

问题是,用户一次只能喜欢一个帖子 - 如果我喜欢currPost.Likes.Add(currUser);,它会从之前喜欢的帖子中移除该用户,并使其像这个新帖子一样。查看数据库,结果发现EF没有从Post引用用户,而是为每个引用帖子的用户都有一个Post_ID列。

如何强制EF在我的帖子表格中创建数组或用户的某些内容,而不是现在如何进行?我是否误解了ICollection的意思(比如,我应该使用List还是Array?)谢谢!

1 个答案:

答案 0 :(得分:0)

您正在寻找的是多对多的收藏品。 EF允许您执行此操作的方法之一是使用模型构建器。请查看my post on navigation properties以获取如何执行此操作的示例(在“多关系”部分中)。

这样做的目的是在数据库中创建一个链接表,以允许许多用户喜欢用户喜欢的帖子和许多帖子。

然后你可以像这样表达你的模型:

public class User
{
    public int ID { get; set; }
    public string Username { get; set; }
    public virtual ICollection<Post> PostsThisUserLikes {get;set;}
}
public class Post
{
    public int ID { get; set; }
    public string Contents { get; set; }
    public virtual ICollection<User> UsersWhoLikeThis { get; set; }
}