首先管理EF6数据库的多对多关系

时间:2014-10-02 16:12:17

标签: c# asp.net-mvc many-to-many entity-framework-6 database-first

我有一个EF6,MVC4数据库第一个Web应用程序。数据库模型定义了一些多对多关系,而.edmx模型以正确的方式显示它们。问题是当我尝试插入数据库时​​,我没有选择将相关的实体对象添加到正在创建的对象中。我可以在每个相关的表上进行单独插入,但是存储多对多关系的那个不会被写入。

这些是冲突的模型:

enter image description here

这是应该存储多对多关系的表的脚本:

CREATE TABLE [dbo].[funcionalidad_perfil] (
[funcionalidad_id] bigint NOT NULL,
[perfil_id] bigint NOT NULL)

我该如何将数据保存到" funcionalidad_perfil"表,如果它没有自动创建?

1 个答案:

答案 0 :(得分:1)

在互联网上寻找答案一周后,我再次尝试,对我的代码进行了回滚并找到答案。它的尴尬是多么容易:

创建" perfil"对象(在创建" funcionalidad"之后),我所要做的就是设置" perfil"的属性。对象,使用方法添加,添加一个新的" funcionalidad"收集。

说明:从db创建实体时,EF在EntityCollection属性中存储两者中实体之间的多对多关系。使用它所需要的只是向集合中添加一个新对象。在SaveChanges方法中,数据被保存到两个表中,即保存新对象的表和存储多对多关系的表。

代码示例:

[HttpPost]
public ActionResult Add(Perfil perfil)
{
    if (ModelState.IsValid)
    {
        perfil.funcionalidad.Add(db.Funcionalidad.First());
        db.Perfil.AddObject(perfil);
        db.SaveChanges();
        return RedirectToAction("Index");
    }
    return View(perfil);
}