Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 保存新模型对象时出现InvalidOperationException_C#_Asp.net Mvc 4_Razor_Entity Framework 6 - Fatal编程技术网

C# 保存新模型对象时出现InvalidOperationException

C# 保存新模型对象时出现InvalidOperationException,c#,asp.net-mvc-4,razor,entity-framework-6,C#,Asp.net Mvc 4,Razor,Entity Framework 6,我正在尝试添加一个新的用户(模型),其中包括一个角色(模型)。 我的视图包括一个DropDownListFor,其中包含一个角色列表。 在尝试最终将用户添加到数据库时,我总是遇到一个异常 视图: 型号: 例外情况: 在模型的AddUser中,您正在创建一个新的KebaContext并添加user,但是user.Role看起来包含一个来自不同上下文的Role。您是如何定义Role和user的?没有任何1-1关系?它们是1-*定义的,它们是用模型设计器(实体框架)创建的。您有没有可能在github上

我正在尝试添加一个新的
用户
(模型),其中包括一个
角色
(模型)。 我的视图包括一个
DropDownListFor
,其中包含一个角色列表。 在尝试最终将用户添加到数据库时,我总是遇到一个异常

视图: 型号: 例外情况:
在模型的
AddUser
中,您正在创建一个新的
KebaContext
并添加
user
,但是
user.Role
看起来包含一个来自不同上下文的
Role

您是如何定义
Role
user
的?没有任何1-1关系?它们是1-*定义的,它们是用模型设计器(实体框架)创建的。您有没有可能在github上实现这一点,以便我们更好地调试这个问题?RoleModel和UserModel是否共享相同的数据库上下文?当实体不共享相同的DB上下文,但您从一个上下文获取对象并尝试在另一个上下文上使用它(将角色应用于用户)时,可能会发生此错误。没有其他上下文,只有KebaContext。抱歉,我想说的是,它看起来像是从
KebaContext
(在
getRoles()
?)的一个实例中检索
Role
),然后当您添加用户时,您将其添加到
KebaContext
的一个新实例中,该实例尝试将任何关联实体附加到该上下文。您可能需要确保已释放上一个上下文。
@model Keba.Data.EF.User
@{
    ViewBag.Title = "Add User";
    List<SelectListItem> roles = new List<SelectListItem>();

}
<h2>Add</h2>
@using (Html.BeginForm("AddUser", "User", FormMethod.Post,
                                      new { enctype = "multipart/form-data" }))
{
    <table>
        <tr><th>@Html.LabelFor(model => model.UserName)</th><td>@Html.EditorFor(model => model.UserName)</td></tr>
        <tr><th>@Html.LabelFor(model => model.Password)</th><td>@Html.EditorFor(model => model.Password)</td></tr>
        @Html.HiddenFor(model => model.MailAdress)
        <tr>
            <th>Roles</th>
            <td>
               @Html.DropDownListFor(x => x.Role.RoleId, new SelectList(ViewBag.roles, "RoleId", "RoleName"))

            </td>
        </tr>
    </table>
    <input name="add" type="submit" value="add" />
    <input name="cancel" type="submit" value="cancel" />
}
 [HttpPost]
 public ActionResult AddUser(User user)
 {
     if (Request.Form["add"] != null)
     {
         user.Role = RoleModel.Instance.getRoles().Where(x => x.RoleId == user.Role.RoleId).FirstOrDefault();
         UserModel.Instance.AddUser(user);
     }
     return RedirectToAction("Index");
 }
public void AddUser(User user)
{
    using(var db = new KebaContext())
    {
        if (user != null)
        {
            user.MailAdress = "";
            db.UserSet.Add(user);//Exception
            db.SaveChanges();
        }             
    }
}
{System.InvalidOperationException: An entity object cannot be referenced by multiple instances of IEntityChangeTracker.
   at System.Data.Entity.Core.Objects.ObjectContext.VerifyContextForAddOrAttach(IEntityWrapper wrappedEntity)
   at .....