我想用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<Order> Orders { get; set; }
public DbSet<Product> Products { get; set; }
public DbSet<PartCategory> PartCategory { get; set; }
public DbSet<Part> Parts { get; set; }
}
public class Product
{
public int ProductId { get; set; }
public string ProductName { get; set; }
public double Price { get; set; }
public List<PartCategory> PartCategory { get; set; }
}
public class PartCategory
{
public int PartCategoryId { get; set; }
public string Category { get; set; }
public List<Part> Parts { get; set; }
}
//更新
public class ProductPartCategory
{
public int ProductId { get; set; }
public Product Product { get; set; }
public int PartCategoryId { get; set; }
public PartCategory PartCategory { get; set; }
}
public class Product
{
public int ProductId { get; set; }
public string ProductName { get; set; }
public double Price { get; set; }
public List<PartCategory> PartCategories{ get; set; }
}
public class PartCategory
{
public int PartCategoryId { get; set; }
public string Category { get; set; }
public List<Product> Products { get; set; }
//dont mind this propertie its for other stuff
public List<Part> Parts { get; set; }
}
答案 0 :(得分:0)
您可以使用 Fluent API 尝试如下所示。
注意:
没有实体类来表示的多对多关系 加入表尚不支持。但是,你可以代表一个 通过包含连接的实体类来实现多对多关系 表和映射两个单独的一对多关系。
public class ShoppingDbContext: DbContext
{
public DbSet<Product> Products { get; set; }
public DbSet<PartCategory> PartCategories{ get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<ProductPartCategory>()
.HasKey(t => new { t.ProductId, t.PartCategoryId });
modelBuilder.Entity<ProductPartCategory>()
.HasOne(pt => pt.Product)
.WithMany(p => p.ProductPartCategories)
.HasForeignKey(pt => pt.ProductId);
modelBuilder.Entity<ProductPartCategory>()
.HasOne(pt => pt.PartCategory)
.WithMany(t => t.ProductPartCategories)
.HasForeignKey(pt => pt.PartCategoryId);
}
}
您的模型应该是这样的:
public class Product
{
public int ProductId { get; set; }
public string ProductName { get; set; }
public double Price { get; set; }
public List<ProductPartCategory> ProductPartCategories { get; set; }
}
public class PartCategory
{
public int PartCategoryId { get; set; }
public string Category { get; set; }
public List<ProductPartCategory> ProductPartCategories { get; set; }
}
public class ProductPartCategory
{
public int ProductId { get; set; }
public Product Product { get; set; }
public int PartCategoryId { get; set; }
public PartCategory PartCategory { get; set; }
}
答案 1 :(得分:0)
你已经得到了一些答案,但是你可以找到适合自己的方法......
我回答所有EF建模问题的方法是让dotnet对我进行数据结构逆向工程。通过在命令行提示符(从项目文件目录内部)执行脚手架命令,dotnet将创建一堆文件,然后您可以直接使用或检查结构并根据自己的喜好删除。
唯一可行的方法是,如果您在开发数据库中正确设置了所有关系(外键等)。
dotnet ef dbcontext scaffold "YourConnectionString" Microsoft.EntityFrameworkCore.SqlServer -a -t PartCategory -t Products -t ProducsPartCategory --o OutputDirectory