簡體   English   中英

ASP.NET MVC Core:添加IdentityUser后發生錯誤

[英]ASP.NET MVC Core: Error occurs after adding IdentityUser

我正在學習構建一個ASP.NET MVC Core Web應用程序。 一切正常,直到我開始向其中添加Identity

注冊用戶可以創建許多職位 我使用該項目隨附的ApplicationUser.cs作為User 我為所有其他實體創建了另一個DbContext

模型中的ApplicationUser.cs

public class ApplicationUser : IdentityUser
{
    // CUSTOM PROPERTIES
    public string Name { get; set; }
    public ICollection<Job> Jobs { get; set; }
}

模型中的Job.cs

public class Job 
{
    public int ID { get; set; }
    public string Title { get; set; }

    // contains other properties

    public string ApplicationUserID { get; set; }
    public virtual ApplicationUser ApplicationUser { get; set; }
}

ApplicationDbContext.cs

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options)
    {

    }
    protected override void OnModelCreating(ModelBuilder builder)
    {
        base.OnModelCreating(builder);
    }
}

當我在Job.cs添加這兩Job.cs ,錯誤彈出。

    public string ApplicationUserID { get; set; }
    public virtual ApplicationUser ApplicationUser { get; set; }

錯誤== >>

未處理的異常:System.Exception:無法為類型“ MyProject.Startup”上的方法“配置”的參數“上下文”解析類型為“ MyProject.Data.JobDbContext”的服務。 ---> System.InvalidOperationException:實體類型'IdentityUserLogin'需要定義一個主鍵。

我知道有些線程正在討論相同的錯誤,但是這些答案並沒有真正的幫助。

您的問題是兩種不同的情況。

JobDbContext包含Job ,它引用ApplicationUser ,它JobDbContext此上下文中,但是由EF自動添加,因為您已鏈接到它。 並且此ApplicationUser (它的父IdentityUser )包含登錄集合( IdentityUserLogin ),該集合也不是此上下文的一部分,而是由EF自動添加的,依此類推...所有這些類都在OnModelCreating IdentityDbContext中配置, OnModelCreatingJobDbContext這就是為什么你看到這個錯誤-你沒有說明鍵/索引/這個班的引用JobDbContext

您應該將兩個DbContext合並為一個,或者刪除public virtual ApplicationUser ApplicationUser { get; set; } public virtual ApplicationUser ApplicationUser { get; set; } public virtual ApplicationUser ApplicationUser { get; set; }Job類和人工管理相關對象(確保引用完整性,做延遲加載等)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM