我有一个关于MVC3和EF中的多对多关系的基本问题。 在我的数据库中,我有文章和标签(多对多),通过TagArticle表连接到两个表的外键。 在我的MVC项目中,我创建了具有来自文章和标签的属性的viewmodel,我想在一个视图中使用它,允许用户创建文章并为其选择标签。 如何对该场景进行插入操作? 感谢您的帮助。使用MVC3中的实体框架插入到许多相关的表格和视图模型
3
A
回答
0
像这样的事情应该“只是工作”:
// get tags by name (tagNames is array of string)
var tags = (from t in db.Tags where tagNames.Contains(t.Name) select t).ToList();
var article = CreateArticleFromPostedForm(...);
var newTags = from tagName in tagNames.Except(tags.Select(t => t.Name)) select new Tag(tagName);
// Tags collection should be initialized properly when creating the article
// NOTE: probably better to add a constructor for Article that accepts a list of Tags
article.Tags.AddRange(tags.Concat(newTags));
db.SaveChanges();
0
如果你只需要创建新的文章中,你可以使用这种方法:
- 在你的表格,你必须张贴的文章,要么名单分配给物品的标记ID或标记名称
- 然后,您可以将新的
Article
添加到上下文 - 如果您发布ID,您必须为每个标记a创建虚拟对象第二附加到上下文
- 如果你发布你必须加载标签对象从数据库中每个名字(你需要它的ID)
- 最后的名字,你可以填写
Tags
新Article
加入上下文(它必须是作为用于任何连接或装载Tags
)相同的情况下
因此,它应该是这样的:
context.Articles.AddObject(article);
int[] ids = GetIdsFromRequest();
foreach(var tag in ids.Select(id => new Tag { Id = id }))
{
context.Tags.Attach(tag);
article.Tags.Add(tag);
}
context.SaveChanges();
它应该工作,因为你知道,所有关系到标签是新的,但一旦你婉t修改文章并更改分配的标签,您将需要more complicated approach。
相关问题
- 1. 实体框架 - 使用视图模型
- 2. 实体框架 - 插入到关系表
- 3. ASP.NET - 如何使用实体框架来构建MVC3模型和视图?
- 4. 实体框架地图模型到表
- 5. ASP.NET MVC3和实体框架 - 在一个视图中的一对多关系
- 6. 使用include加入实体框架中的相关实体
- 7. Automapper - 从实体框架映射许多一对多查找到视图模型
- 8. ASP.NET MVC实体框架插入许多一对多使用MultiSelectList
- 9. 实体框架 - 使用外键插入到多个表中
- 10. 使用相同/相似模式和实体框架处理多个表格
- 11. 许多到许多实体框架
- 12. 实体框架4代码第一,使用相同的模型到多个表?
- 13. 如何将视图添加到实体框架实体模型?
- 14. 相关表格上的不同模式名称 - 实体框架
- 15. 实体框架V1造型多到许多查找表的关系
- 16. 实体框架:表插入
- 17. 将实体框架模型映射到多个表格
- 18. 实体框架 - 插入实体与多个模型和数据库
- 19. 建模相关的实体与SQL Server和实体框架
- 20. 通过实体框架中的视图模型保存很多关系6
- 21. 实体框架/ EF4:在事务处理中插入多个相关实体
- 22. LINQ到实体:许多一对多加入表和视图
- 23. 实体框架可以使用单个SaveChanges()添加许多相关实体吗?
- 24. 实体框架模型多表到单个实体
- 25. 多实体框架模型和objectcontext
- 26. 如何使用MVC3中的一个视图/模型和实体数据模型来处理多个表?
- 27. 从视图插入MVC中使用enitity框架的多个模型
- 28. 实体框架和视图
- 29. 视图和实体框架
- 30. 实体框架和视图