Asp.net mvc 3 ASP.NET MVC3-实体框架:多对多关系(新闻和类别)

Asp.net mvc 3 ASP.NET MVC3-实体框架:多对多关系(新闻和类别),asp.net-mvc-3,entity-framework-4,Asp.net Mvc 3,Entity Framework 4,我想为新闻创建类别。这将是多对多的关系。如何正确地理解这一点?我创建了两个类: public class News { public News() { this.NewsCategories = new List<NewsCategory>(); } public int ID { get; set; } public DateTime Date { get; set; } public string Title { g

我想为新闻创建类别。这将是多对多的关系。如何正确地理解这一点?我创建了两个类:

public class News
{
    public News()
    {
        this.NewsCategories = new List<NewsCategory>();
    }
    public int ID { get; set; }
    public DateTime Date { get; set; }
    public string Title { get; set; }  
    public string Text { get; set; }
    public IEnumerable<NewsCategory> NewsCategories { get; set; }
}

public class NewsCategory
{
    public NewsCategory()
    {
        this.News = new List<News>();
    }
    public int ID { get; set; }
    public string Name { get; set; }
    public IEnumerable<News> News { get; set; }
}
公共类新闻
{
公共新闻
{
this.NewsCategories=新列表();
}
公共int ID{get;set;}
公共日期时间日期{get;set;}
公共字符串标题{get;set;}
公共字符串文本{get;set;}
公共IEnumerable新闻类别{get;set;}
}
公共类新闻类别
{
公共新闻类别()
{
this.News=新列表();
}
公共int ID{get;set;}
公共字符串名称{get;set;}
公共IEnumerable新闻{get;set;}
}
但是EF只创建了两个表…没有连接表。我还创建了自定义DbInitializer:

public class TouristGuideDBInitializer : DropCreateDatabaseAlways<TouristGuideDB>
{
    protected override void Seed(TouristGuideDB context)
    {
        base.Seed(context);
        context.NewsCategories.Add(new NewsCategory { Name = "Default" });
        context.NewsCategories.Add(new NewsCategory { Name = "Second" });
        context.News.Add(new News { Date = DateTime.Now, Text = "asasdfas fasdfa sdf asf asf", Title = "Hello world" });
        context.SaveChanges();
        var news = context.News.First();            
        var cat = context.NewsCategories.Where(r => r.Name == "Default").Single();            
        news.NewsCategories.ToList().Add(cat);
        context.SaveChanges();
    }
}
公共类TouristGuideDBInitializer:DropCreateDatabaseAlways
{
受保护的覆盖无效种子(TouristGuideDB上下文)
{
种子(上下文);
Add(新的新闻类别{Name=“Default”});
Add(新的新闻类别{Name=“Second”});
context.News.Add(newnews{Date=DateTime.Now,Text=“asasdfas fasdfa sdf asf asf”,Title=“Hello world”});
SaveChanges();
var news=context.news.First();
var cat=context.NewsCategories.Where(r=>r.Name==“Default”).Single();
news.NewsCategories.ToList().Add(cat);
SaveChanges();
}
}
但它只添加了一条新闻和两个类别…没有关系。。。
应该如何正确执行(关系)?

您需要使用
ICollection
来获取导航属性。

好的,这很有帮助-我有联接表(NewsCategoryNews),但仍然不知道如何管理此关系。。。news.NewsCategories.ToList().Add(cat);没有向联接表添加任何内容…当我手动添加它时,我无法使用news.newscapections.ToList().First()获取数据。name不使用
ToList()
;您正在添加到由`ToList()
创建的临时列表中。EF仅在您保存时将其添加到关系的另一端,或者(IIRC),如果您使属性
virtual`,它可以帮助您: