2016-05-10 5 views
0

это мой класс, чтобы набрать зарегистрированного пользователя , когда я получаю эту ошибку, но могу понять это при поиске ошибки. Я не получаю никаких идей.my класс модели имеет свойство общественного виртуальный пользователь User {получить, установить;}Объект сущности не может ссылаться на несколько экземпляров IEntityChangeTracker «

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"); 

    } 

ответ

0

Вы должны использовать отдельный объект для хранения пользователя в сессии, так объект сеанса i s не является объектом db. создайте класс SessionUser со всеми необходимыми свойствами и сохраните этот объект в сеансе.

Добавить свойство UserId в объект post и заполнить поле UserId сообщения вместо объекта User. EF должен распознавать UserId как FK для пользователя.

+0

Большое спасибо за то, что вы делитесь своим драгоценным временем ... –

Смежные вопросы