У меня есть следующие модели:Как я могу ссылаться на объект пользователя в модели Entity Framework?
public class MyEntity
{
public Guid Id { get; set; }
public virtual ICollection<ApplicationUser> AssociatedUsers { get; set; }
public MyEntity()
{
AssociatedUsers = new HashSet<ApplicationUser>();
}
}
Обратите внимание, что каждый объект имеет некоторые связанные с ним пользователей. В моем контроллере, я пытаюсь добавить экземпляр MyEntity
в базу данных, как это:
private ApplicationDbContext db = new ApplicationDbContext();
// ...
ApplicationUser currentUser = System.Web.HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>().FindById(System.Web.HttpContext.Current.User.Identity.GetUserId());
MyEntity entityInstance = new MyEntity();
entityInstance.Id = Guid.NewGuid();
entityInstance.AssociatedUsers.Add(currentUser);
db.MyEntities.Add(entityInstance);
db.SaveChanges();
Однако, этот код выдает следующее сообщение об ошибке:
An entity object cannot be referenced by multiple instances of IEntityChangeTracker.
я понял из этого сообщения об ошибке, CurrentUser
все еще управляется контекстом базы данных, который поддерживает ApplicationUserManager
, поэтому я не могу добавить его в другой контекст. Но, в отличие от other cases that I have found documented, я не могу просто переключить контекст так, чтобы они совместно использовали соединение с базой данных: пользовательский объект исходит от ApplicationUserManager
. Что мне нужно сделать, чтобы решить эту проблему? Я делаю что-то принципиально неправильно? Я знаю, что вместо этого я мог бы использовать идентификатор и искать соответствующего пользователя, но я предпочел бы, чтобы объект был доступен напрямую.