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`,它可以帮助您: