实体对象不能被 IEntityChangeTracker 的多个实例引用”
An entity object cannot be referenced by multiple instances of IEntityChangeTracker"
这是我Class兑现当前登录的用户
当我收到此错误但我可以在搜索错误时弄清楚我没有收到任何 idea.my 模型 class 有 属性
public 虚拟用户用户{get;set;}
public static class Auth
{
private const string UserKey = "BlogwithEf.Auth.UserKey";
public static User User {
get
{
if (!HttpContext.Current.User.Identity.IsAuthenticated)
return null;
var user = HttpContext.Current.Items[UserKey] as User;
if (user == null)
{
var db= new Database();
user = db.Users.FirstOrDefault(u => u.Username == HttpContext.Current.User.Identity.Name);
if (user == null)
return null;
HttpContext.Current.Items[UserKey] = user;
}
return user;
}
}
}
这是我的控制器代码
[HttpPost,ValidateAntiForgeryToken]
public ActionResult New(PostsNew form)
{
if (!ModelState.IsValid)
return View(form);
var post = new Post
{
User = Auth.User,
CreatedAt=DateTime.UtcNow,
Title = form.Title,
Slug = form.Slug,
Content = form.Content
};
//Error is here
Database.Posts.Add(post);
Database.SaveChanges();
return RedirectToAction("Index");
}
您应该使用单独的对象来存储会话中的用户,因此会话对象不是数据库对象。使用您需要的所有属性创建一个 SessionUser class 并将此对象存储到会话中。
向您的 post 对象添加一个 UserId 属性 并填写 post 的 UserId 字段而不是 User 对象。 EF 应该将 UserId 识别为用户的 FK。
这是我Class兑现当前登录的用户 当我收到此错误但我可以在搜索错误时弄清楚我没有收到任何 idea.my 模型 class 有 属性 public 虚拟用户用户{get;set;}
public static class Auth
{
private const string UserKey = "BlogwithEf.Auth.UserKey";
public static User User {
get
{
if (!HttpContext.Current.User.Identity.IsAuthenticated)
return null;
var user = HttpContext.Current.Items[UserKey] as User;
if (user == null)
{
var db= new Database();
user = db.Users.FirstOrDefault(u => u.Username == HttpContext.Current.User.Identity.Name);
if (user == null)
return null;
HttpContext.Current.Items[UserKey] = user;
}
return user;
}
}
}
这是我的控制器代码
[HttpPost,ValidateAntiForgeryToken]
public ActionResult New(PostsNew form)
{
if (!ModelState.IsValid)
return View(form);
var post = new Post
{
User = Auth.User,
CreatedAt=DateTime.UtcNow,
Title = form.Title,
Slug = form.Slug,
Content = form.Content
};
//Error is here
Database.Posts.Add(post);
Database.SaveChanges();
return RedirectToAction("Index");
}
您应该使用单独的对象来存储会话中的用户,因此会话对象不是数据库对象。使用您需要的所有属性创建一个 SessionUser class 并将此对象存储到会话中。
向您的 post 对象添加一个 UserId 属性 并填写 post 的 UserId 字段而不是 User 对象。 EF 应该将 UserId 识别为用户的 FK。