1
我在EF 6 Code First中遇到问题,而我正在执行多对多的关系方法。它不会填充我的标签和帖子列表。实体框架中的多对多关系代码优先6
我所试图做的事:
后
public class Post
{
public int PostID { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public virtual Category Category { get; set; }
public int CategoryID { get; set; }
public virtual ICollection<Tag> Tags { get; set; }
}
类别
public class Category
{
public int CategoryID { get; set; }
public string Name { get; set; }
public virtual ICollection<Post> Posts { get; set; }
}
标签
public class Tag
{
public int TagID { get; set; }
public string Name { get; set; }
public virtual ICollection<Post> Posts { get; set; }
}
PostTagMap
public class PostTagMap
{
public virtual Post Post { get; set; }
[Key, Column(Order = 0)]
public int PostID { get; set; }
public virtual Tag Tag { get; set; }
[Key, Column(Order = 1)]
public int TagID { get; set; }
}
PostDbContext
public class PostDbContext : DbContext
{
public PostDbContext()
{
Database.SetInitializer(new PostDbContextInitializer());
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
base.OnModelCreating(modelBuilder);
}
public DbSet<Post> Post { get; set; }
public DbSet<Tag> Tag { get; set; }
public DbSet<Category> Category { get; set; }
public DbSet<PostTagMap> PostTagMap { get; set; }
}
PostDbContextInitializer
public class PostDbContextInitializer : DropCreateDatabaseIfModelChanges<PostDbContext>
{
protected override void Seed(PostDbContext context)
{
List<Category> listCategory = new List<Category>
{
new Category { Name = "Programming" },
new Category { Name = "Designing" },
new Category { Name = "Database" },
};
List<Tag> listTag = new List<Tag>
{
new Tag { Name = "Csharp" },
new Tag { Name = "Asp.Net" },
new Tag { Name = "Sencha Touch" },
new Tag { Name = "MVC" },
new Tag { Name = "SqlServer" },
new Tag { Name = "Oracle" },
new Tag { Name = "Bootstrap" },
new Tag { Name = "Jquery" },
};
List<Post> listPost = new List<Post>
{
new Post { Title = "List Paging in Sencha Touch", Description = "In this one I am going to add one more important and most used functionality i.e. paging in sencha touch List.", Category = listCategory.Find(m => m.Name.Equals("Programming")) },
new Post { Title = "CRUD Operation using Sencha Touch and ASP.Net MVC Web API", Description = "CRUD Operation using Sencha Touch and ASP.Net MVC Web API In this article I am going to explain and demonstrate how to create", Category = listCategory.Find(m => m.Name.Equals("Programming")) },
new Post { Title = "Union Example in SQL Server", Description = "In this article I am going to explain a use of union operator in SQL Server Database with a real life scenario and example. The UNION operator is used to combine the result-set of two or more SELECT statements.", Category = listCategory.Find(m => m.Name.Equals("Database")) },
new Post { Title = "Pivot with Dynamic columns in SQL Server", Description = "Pivot with Dynamic columns in SQL Server In this article I will present how we can write a Dynamic PIVOT.", Category = listCategory.Find(m => m.Name.Equals("Database")) },
};
List<PostTagMap> listPostTagMap = new List<PostTagMap>
{
new PostTagMap { Post = listPost.Find(m => m.Title.Equals("List Paging in Sencha Touch")), Tag = listTag.Find(m => m.Name.Equals("Sencha Touch")) },
new PostTagMap { Post = listPost.Find(m => m.Title.Equals("List Paging in Sencha Touch")), Tag = listTag.Find(m => m.Name.Equals("Asp.Net")) },
new PostTagMap { Post = listPost.Find(m => m.Title.Equals("CRUD Operation using Sencha Touch and ASP.Net MVC Web API")), Tag = listTag.Find(m => m.Name.Equals("Sencha Touch")) },
new PostTagMap { Post = listPost.Find(m => m.Title.Equals("CRUD Operation using Sencha Touch and ASP.Net MVC Web API")), Tag = listTag.Find(m => m.Name.Equals("Asp.Net")) },
new PostTagMap { Post = listPost.Find(m => m.Title.Equals("CRUD Operation using Sencha Touch and ASP.Net MVC Web API")), Tag = listTag.Find(m => m.Name.Equals("MVC")) },
new PostTagMap { Post = listPost.Find(m => m.Title.Equals("CRUD Operation using Sencha Touch and ASP.Net MVC Web API")), Tag = listTag.Find(m => m.Name.Equals("Csharp")) },
new PostTagMap { Post = listPost.Find(m => m.Title.Equals("Union Example in SQL Server")), Tag = listTag.Find(m => m.Name.Equals("SqlServer")) },
new PostTagMap { Post = listPost.Find(m => m.Title.Equals("Union Example in SQL Server")), Tag = listTag.Find(m => m.Name.Equals("Oracle")) },
new PostTagMap { Post = listPost.Find(m => m.Title.Equals("Pivot with Dynamic columns in SQL Server")), Tag = listTag.Find(m => m.Name.Equals("Oracle")) },
new PostTagMap { Post = listPost.Find(m => m.Title.Equals("Pivot with Dynamic columns in SQL Server")), Tag = listTag.Find(m => m.Name.Equals("SqlServer")) },
};
listCategory.ForEach(m =>
{
context.Category.Add(m);
});
context.SaveChanges();
listTag.ForEach(m =>
{
context.Tag.Add(m);
});
context.SaveChanges();
listPost.ForEach(m =>
{
context.Post.Add(m);
});
context.SaveChanges();
listPostTagMap.ForEach(m =>
{
context.PostTagMap.Add(m);
});
context.SaveChanges();
base.Seed(context);
}
}
上述一切工作正常和数据库条目也将是正确的。但是当我尝试在Controller中检索结果集时发生问题。它不会在标签中的帖子和帖子列表中填充标签列表。
public class HomeController : Controller
{
PostDbContext db = new PostDbContext();
public ActionResult Index()
{
//var posts = db.Post.ToList();
var posts = db.Post.Include(m => m.Tags).ToList();
var tags = db.Tag.ToList();
var categories = db.Category.ToList();
return View(posts);
}
}
请帮帮我。我怎样才能做到这一点?