【发布时间】:2018-12-31 15:50:01
【问题描述】:
我正在使用 ASP.NET Core MVC 构建应用程序。我正在尝试插入具有多对多关系的新记录。我有 3 张桌子 Repairs、Parts 和 RepairParts。
如何将RepairId 和PartId 插入RepairParts 表中? EF Core 是否为此提供了一些东西?我搜索了文档,但没有提及如何执行此操作。
Entity Framework 会自动执行此操作吗? (插入数据透视表)还是我需要手动操作?举个例子会有所帮助。
修复类:
public class Repair
{
[Key]
public int RepairId { get; set; }
public int VehicleId { get; set; }
public string Notes { get; set; }
public string Mileage { get; set; }
public DateTime RepairDate { get; set; }
public string uuid { get; set; }
[ForeignKey("VehicleId")]
public Vehicle Vehicle { get; set; }
public virtual ICollection<RepairParts> RepairParts { get; set; }
}
部分类:
public class Part
{
public int PartId { get; set; }
public int Code { get; set; }
public string PartCode { get; set; }
public string Type { get; set; }
public string Name { get; set; }
public string Descr { get; set; }
public string Manufacturer { get; set; }
public string uuid { get; set; }
public virtual ICollection<RepairParts> RepairParts { get; set; }
}
RepairPart类:
public class RepairParts
{
public int RepairId { get; set; }
public Repair Repair { get; set; }
public int PartId { get; set; }
public Part Part { get; set; }
public decimal price { get; set; }
}
DbContext 类:
public class ApplicationDbContext : IdentityDbContext
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{
}
public DbSet<Customer> Customers { get; set; }
public DbSet<TaxOffice> TaxOffices { get; set; }
public DbSet<Vehicle> Vehicles { get; set; }
public DbSet<Part> Parts { get; set; }
public DbSet<Repair> Repairs { get; set; }
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
builder.Entity<Customer>()
.HasMany(v => v.Vehicles)
.WithOne(b => b.Customer);
builder.Entity<Vehicle>()
.HasOne(c => c.Customer)
.WithMany(b => b.Vehicles);
builder.Entity<Vehicle>()
.HasMany(v => v.Repairs)
.WithOne(c => c.Vehicle);
builder.Entity<RepairParts>()
.HasKey(t => new { t.RepairId, t.PartId });
builder.Entity<RepairParts>()
.HasOne(r => r.Repair)
.WithMany(t => t.RepairParts)
.HasForeignKey(f => f.RepairId);
builder.Entity<RepairParts>()
.HasOne(r => r.Part)
.WithMany(p => p.RepairParts)
.HasForeignKey(f => f.PartId);
}
}
【问题讨论】:
-
Entity Framework 会自动执行此操作吗? 不,这是简短且唯一的答案。
标签: c# entity-framework asp.net-core many-to-many