[英]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);
}
}
運行遷移時,我得到以下結果:
它被稱為列的名稱,如CategoriesId
和ProductsId
有沒有辦法更改這些列的名稱?
有一個 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.