使用Entity Framework Core創建具有外鍵的新表

.net-core asp.net-core asp.net-core-mvc c# entity-framework-core

我有一個DbContext ,我通過開發人員命令提示符創建一個遷移模式,然後轉到我的數據庫。但是如果你看產品對像我有一個名為Parts的字典對象。在命令提示符中更新數據庫時,該屬性不會添加到Product表中。我甚至不知道我是否有可能做的事情。

我想在數據庫名為添加一個表Parts ,然後添加一個外鍵Product ,其連接表Parts字典對象在Product表,以及新的Parts表。這是否可以使用Entity Framework Core?

public class ShoppingDbContext : IdentityDbContext<User>
{
    public ShoppingDbContext(DbContextOptions options) : base(options)
    {
    }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        base.OnConfiguring(optionsBuilder);
    }

    public DbSet<Product> Products { get; set; }
    public DbSet<Order> Orders { get; set; }
}

public class Product 
{
    public int ProductId { get; set; }
    public string ProductName { get; set; }
    public double Price { get; set; }
    public int CategoryId { get; set; }
    Dictionary<string, Part> Parts { get; set; }
}

熱門答案

EF Core目前無法直接映射字典屬性。如果要在產品和零件之間創建關聯,請將每個關聯定義為實體。然後,您可以在它們之間創建導航屬性 - 從零件到它所屬的產品的引用,以及產品上的零件集合。例如:

public class Product 
{
    public int ProductId { get; set; }
    public string ProductName { get; set; }
    public double Price { get; set; }
    public int CategoryId { get; set; }
    public ICollection<Part> Parts { get; set; }
}

public class Part
{
    public int PartId { get; set; }
    public int ProductId { get; set; }
    public Product Product { get; set;}
}

Part還定義了一個屬性ProductId,它充當Product實體的FK。您不需要添加該屬性 - 如果您不需要,EF將為您模擬它,但如果FK映射到屬性,通常更容易處理實體。



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow