簡體   English   中英

首先創建多對多關系代碼

[英]Creating many-to-many relationship code first

我正在嘗試使用代碼優先方法在 C# 中創建多對多關系。 在現實世界中,一個產品可以有很多類別,一個類別可以有很多產品。 所以這就是我想出的:

產品.cs:

public class Product
{
    public int Id { get; set; }

    public string Name { get; set; }

    public virtual ICollection<Category> Categories { get; set; }
}

類別.cs:

public class Category
{
    public Category(CategoryEnum @enum)
    {
        Id = (int)@enum;
        Name = @enum.ToString();
    }

    public Category() { }

    [Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int Id { get; set; }

    public string Name { get; set; }

    public virtual ICollection<Product> Products { get; set; }


    public static implicit operator Category(CategoryEnum @enum) => new Category(@enum);

    public static implicit operator CategoryEnum(Category category) => (CategoryEnum)category.Id;

}

Category映射到一個Enum ,如下所示:

public enum CategoryEnum
{
    Electronics = 1,
    Gardening = 2
}

最后, DbContext看起來像這樣:

public class ProductDbContext : DbContext
{
    public DbSet<Entities.Product> Products { get; set; }
    public DbSet<Entities.Category> Categories { get; set; }

    public ProductDbContext(DbContextOptions<ProductDbContext> options)
    : base(options)
    { }

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

運行遷移時,我得到以下結果:

在此處輸入圖像描述

它被稱為列的名稱,如CategoriesIdProductsId有沒有辦法更改這些列的名稱?

有一個 go :

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

        builder
            .Entity<Product>()
            .HasMany(p => p.Categories)
            .WithMany(p => p.Products)
            .UsingEntity<Dictionary<string, object>>("ProductCategory",
              right => right.HasOne<Category>()
                .WithMany()
                .HasForeignKey("CategoryId")
                .HasConstraintName("FK_ProductCategory_CategoryId__Category_Id")
                .OnDelete(DeleteBehavior.Cascade),
              left => left.HasOne<Product>()
                .WithMany()
                .HasForeignKey("ProductId")
                .HasConstraintName("FK_ProductCategory_ProductId__Product_Id")
                .OnDelete(DeleteBehavior.Cascade)
          );
    }

有用:

在此處輸入圖像描述

暫無
暫無

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

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