私は、次のモデルがあります。各エンティティは、いくつかの関連するユーザーがいることを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
から来ています。これを解決するために私は何をする必要がありますか?基本的に何か間違っているのですか?代わりにIDを使用して対応するユーザーを検索することができますが、オブジェクトに直接アクセスできるようにすることができます。