“每個表中的列名必須是唯一的。”在數據庫更新期間

asp.net-core c# ef-code-first entity-framework entity-framework-core

我根本不熟悉ASP.NET,但這是我第一個使用ASP.NET Core的應用程序。創建遷移後,我在更新數據庫時遇到問題。當我鍵入命令: dotnet ef database update ,我收到錯誤:

每個表中的列名必須是唯一的。表'廣告'中的列名'PortalUserId'被多次指定。

我認為問題在於我的模型結構,但我不知道我做錯了什麼。當我使用ASP.NET MVC 5進行開發時,一切都很好。

這是我的模型(對案例實體沒有必要):

public class ApplicationDbContext : IdentityDbContext
{
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
        : base(options)
    {
    }
    public DbSet<PortalUser> PortalUsers { get; set; }
    public DbSet<Advert> Adverts { get; set; }
    public DbSet<Category> Categories { get; set; }

    protected override void OnModelCreating(ModelBuilder builder)
    {
        base.OnModelCreating(builder);
        // Customize the ASP.NET Identity model and override the defaults if needed.
        // For example, you can rename the ASP.NET Identity table names and more.
        // Add your customizations after calling base.OnModelCreating(builder);
    }
}

public class Advert
{
    public int ID { get; set; }
    public string Title { get; set; }
    public int CategoryID { get; set; }
    public virtual Category Category { get; set; }
    public int PortalUserID { get; set; }
    public PortalUser PortalUser { get; set; }
}

public class PortalUser : IdentityUser
{
    public string FirstName { get; set; }
    public string Surname { get; set; }
    public ICollection<Advert> Adverts { get; set; }

}

我在這裡做的是用於延遲加載目的的普通虛擬映射。我將FK存儲到廣告字段中的PortalUser。

我將感謝每一個有用的答案!

我已經知道了,不支持延遲加載所以現在我的模型在官方教程中看起來像:

https://docs.microsoft.com/en-us/ef/core/get-started/aspnetcore/new-db

    public class BloggingContext : DbContext
{
    public BloggingContext(DbContextOptions<BloggingContext> options)
        : base(options)
    { }

    public DbSet<Blog> Blogs { get; set; }
    public DbSet<Post> Posts { get; set; }
}

public class Blog
{
    public int BlogId { get; set; }
    public string Url { get; set; }

    public List<Post> Posts { get; set; }
}

public class Post
{
    public int PostId { get; set; }
    public string Title { get; set; }
    public string Content { get; set; }

    public int BlogId { get; set; }
    public Blog Blog { get; set; }
}

一般承認的答案

好的,伙計們,我找到了解決方案!所需的一切,它是從int到string的屬性PortalUserId的更改類型。比所有事情編譯,沒有出現雙重字段!

謝謝你至少試著幫助我!



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因