Tan*_*ang 5 c# asp.net entity-framework asp.net-mvc-4
每次我尝试将用户附加到组(或创建组)时,我都会收到此错误.
这是GroupController:
public class GroupsController : Controller
{
private Context db = new Context();
[HttpPost]
public ActionResult Create(Group group)
{
if (ModelState.IsValid)
{
group.owner = db.Users.Attach((User)Session["user"]);
//current user stored in session
db.Groups.Add(group);
db.SaveChanges();
return RedirectToAction("Index", "Home");
}
return View(group);
}
}
Run Code Online (Sandbox Code Playgroud)
变量Session ["user"]设置为logon,这里是AccountController代码:
public class AccountController : Controller
{
private Context db = new Context();
[HttpPost]
public ActionResult LogOn(LoginTemplate login, string returnUrl)
{
User result = db.Users.Where(m => m.email == login.email).Where(m => m.password == login.password).SingleOrDefault();
if (result != null)
{
Session["logged"] = true;
Session["user"] = result;
return RedirectToAction("Index", "Home");
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的背景:
public class Context : DbContext
{
public Context() : base("name=myContext")
{
}
private static Context _instance;
public DbSet<User> Users { get; set; }
public DbSet<Group> Groups { get; set; }
//I tried to use this method in order to always get the same context but does not work
public static Context getContext()
{
if (_instance == null)
{
_instance = new Context();
}
return _instance;
}
}
Run Code Online (Sandbox Code Playgroud)
这是User.cs
public class User
{
[Key]
public int userId { get; set; }
[Display(Name="Firstname")]
public string firstname { get; set; }
[Display(Name = "Lastname")]
public string lastname { get; set; }
public virtual ICollection<Group> membership { get; set;}
}
Run Code Online (Sandbox Code Playgroud)
这是group.cs:
public class Group
{
[Key]
public int idGroup { get; set; }
public string name { get; set; }
public User owner { get; set; }
public virtual ICollection<User> members { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我试图在我的Context中做一个"单例"(总是在每个控制器中重用相同的上下文)但是当我这样做时,我得到"Db关闭"错误信息......
无需将 db.Users.Attach 与保存在会话状态中的 User 对象一起使用。您要保存的对象是新组,而不是用户。我的猜测是,当您调用 db.Users.Attach((User)Session["user"]) 时会引发异常,这可能表明当前用户的实体已在当前上下文中由 EF 管理。
| 归档时间: |
|
| 查看次数: |
4121 次 |
| 最近记录: |