C# 如何在实体框架中更新多对多表
我有三张桌子: 新闻C# 如何在实体框架中更新多对多表,c#,entity-framework,linq,C#,Entity Framework,Linq,我有三张桌子: 新闻 public partial class News { public News() { this.Categories = new HashSet<Category>(); } public int NewsId { get; set; } public string NewsTitle { get; set; } public string NewsBody { get; set; }
public partial class News
{
public News()
{
this.Categories = new HashSet<Category>();
}
public int NewsId { get; set; }
public string NewsTitle { get; set; }
public string NewsBody { get; set; }
public System.DateTime NewsDate { get; set; }
public string NewsImagePath { get; set; }
public virtual ICollection<Category> Categories { get; set; }
}
您必须直接处理新闻集和分类。添加或删除这些集合的实体。之后,您必须保存新闻和类别实体。例如:
var category = new Category();
var news = new News();
var removedNews = new News();
var newCategory = new Category();
category.News.Remove(removedNews);
news.Categories.Add(newCategory);
//to do save category and news
您希望使用DbContext直接对实体模型进行更改,然后保存更改。LINQTO实体将负责SQL语句。下面的示例将帮助您找到正确的方法来实现这一点。您不应该编写任何SQL语句
// Replace with your real model from MVC
var model = new Model { SelectedCategoriesIds = new List<int>() };
model.SelectedCategoriesIds.Add(1);
model.SelectedCategoriesIds.Add(2);
model.SelectedCategoriesIds.Add(3);
var newsToUpdate = new News { Categories = new List<Category>() }; // Replace with your call to database
// Use an Entity Framework context to update our db model
using (var dbContext = new MyDbContext())
{
// First clear existing categories
newsToUpdate.Categories.Clear();
// Now add selected categories
foreach (var selectedCategory in model.SelectedCategoriesIds)
{
var dbCat = dbContext.Categories.Single(c => c.Id == selectedCategory);
newsToUpdate.Categories.Add(dbCat);
};
// Save changes
dbContext.SaveChanges();
}
//替换为MVC中的真实模型
var模型=新模型{SelectedCategoriesID=新列表()};
model.SelectedCategoriesIds.Add(1);
model.SelectedCategoriesIds.Add(2);
model.SelectedCategoriesIds.Add(3);
var newsToUpdate=新新闻{Categories=新列表()};//替换为对数据库的调用
//使用实体框架上下文来更新我们的数据库模型
使用(var dbContext=new MyDbContext())
{
//首先,明确现有类别
newsToUpdate.Categories.Clear();
//现在添加选定的类别
foreach(模型中的变量selectedCategory.SelectedCategoriesId)
{
var dbCat=dbContext.Categories.Single(c=>c.Id==selectedCategory);
newsToUpdate.Categories.Add(dbCat);
};
//保存更改
dbContext.SaveChanges();
}
从DbContext中获取新闻对象。对类别列表进行任何更改,然后调用DbContext.SaveChanges();谢谢你的帮助。。。我试着证明它不起作用。。。你能用我的代码告诉我怎么做吗?你能告诉我第三张表的属性吗?还是只有两个ID字段?@tCoe是的,只有两个ID NewsId和CategoryId@Lucia不用担心第三个表,Entity Framework已经使用虚拟ICollection类别映射了该关系。只需操作该属性中的项并保存更改。EF将处理多对多表的SQL。见下面我的答案。
var category = new Category();
var news = new News();
var removedNews = new News();
var newCategory = new Category();
category.News.Remove(removedNews);
news.Categories.Add(newCategory);
//to do save category and news
// Replace with your real model from MVC
var model = new Model { SelectedCategoriesIds = new List<int>() };
model.SelectedCategoriesIds.Add(1);
model.SelectedCategoriesIds.Add(2);
model.SelectedCategoriesIds.Add(3);
var newsToUpdate = new News { Categories = new List<Category>() }; // Replace with your call to database
// Use an Entity Framework context to update our db model
using (var dbContext = new MyDbContext())
{
// First clear existing categories
newsToUpdate.Categories.Clear();
// Now add selected categories
foreach (var selectedCategory in model.SelectedCategoriesIds)
{
var dbCat = dbContext.Categories.Single(c => c.Id == selectedCategory);
newsToUpdate.Categories.Add(dbCat);
};
// Save changes
dbContext.SaveChanges();
}