我在更新與ASP.NET MVC中的應用程序用戶相關的實體時遇到問題。我有ApplicationUser
和Order
之間的一對多關係。這是我的實體和關係配置:如何使用EF6更新與ApplicationUser相關的實體?
public class ApplicationUser : IdentityUser
{
public virtual ICollection<Order> HandlingOrders { get; set; }
}
public class Order
{
public int Id { get; set; }
//some properties
public string OperatorId { get; set; }
[ForeignKey("OperatorId")]
public virtual ApplicationUser Operator { get; set; }
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<ApplicationUser>().HasMany(n => n.HandlingOrders)
.WithOptional(n => n.Operator)
.HasForeignKey(n => n.OperatorId);
}
的問題是,當我嘗試保存Order
在我的控制器,它失敗InvalidOperationException
和消息
兩個對象之間的關係不能定義因爲它們連接到不同的ObjectContext對象。
這是因爲一方面我使用「工作單元」和「通用庫」來保存Order
。從另一方面我使用ApplicationUserManager
來節省ApplicationUser
。
public class OperatorController : Controller
{
private readonly UnitOfWork _unitOfWork;
private ApplicationUserManager _userManager
{
get { return HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>(); }
}
}
因此,我得到兩個背景:首先是從GetOwinContext()
IOwinContext
,第二個是我的正常ApplicationContext
,創建(或正在創造?)在「工作單位」。這種情況會導致異常。
任何人都可以建議我,在這種情況下什麼是最好的?我爲編寫ApplicationUser
的資源庫而戰鬥,但我從未在文章中看到過這種做法,所以我不確定。
以顯而易見的開始。 ApplicationUser是否在一個上下文中(如默認的IdentityDbContext),並且是在另一個像ApplicationContext中聲明的Order?那會導致你的錯誤。如果是這樣,只要讓你的ApplicationContext從IdentityDbContext繼承。 –
@SteveGreene不,我的'ApplicationContext'已經從'IdentityDbContext'繼承了。實際上,我有兩種情況是由兩種不同的方式創建的,並且會導致錯誤。問題是我不知道如何在沒有ApplicationUserManager的情況下與用戶一起工作,就我所見,它不能用ApplicationContext進行初始化。 –
QuarK
如果您只是引用用戶,則不需要UserManager。例如,'ApplicationUser myUser = context.Users.FirstOrDefault(u => u.Id == myUserId);'將獲取身份用戶。如果您要更改密碼等,您需要使用UserManager。顯示相關的存儲庫代碼。 –