IEntityChangeTracker"的多个实例不能引用实体对象。

时间:2016-05-10 13:18:59

标签: asp.net-mvc-3 entity-framework-6

这是我的班级来兑现当前登录的用户 当我得到这个错误,但我可以在搜索错误时弄明白我不知道。我的模型类有属性 public virtual User User {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");

    }

1 个答案:

答案 0 :(得分:0)

您应该使用单独的对象将用户存储在会话中,因此会话对象不是db对象。使用您需要的所有属性创建一个SessionUser类,并将此对象存储到会话中。

向post对象添加UserId属性并填写帖子的UserId字段而不是User对象。 EF应将UserId识别为用户的FK。