gpt4 book ai didi

c# - 使用 Entity Framework Core 在具有多对多关系的数据透视表中插入新记录

转载 作者:行者123 更新时间:2023-11-30 22:56:54 25 4
gpt4 key购买 nike

我正在使用 ASP.NET Core MVC 构建应用程序。我正在尝试插入具有多对多关系的新记录。我有 3 个表 RepairsPartsRepairParts

如何将 RepairIdPartId 插入到 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);
}
}

最佳答案

这里有两种选择:

  1. 插入 RepairParts通过 public virtual ICollection<RepairParts> RepairParts { get; set; }

    var repaire = new Repair { uuid = "R3" };
    var part = new Part { Code = 3 };
    var reparePart = new RepairParts { Repair = repaire, Part = part };
    repaire.RepairParts = new List<RepairParts>()
    {
    reparePart
    };
    _context.Add(repaire);
    _context.SaveChanges();
  2. 插入 RepairParts_context.Add(reparePart1); 明确表示

    var repaire1 = new Repair { uuid = "RR1" };
    var part1 = new Part { Code = 4 };
    var reparePart1 = new RepairParts { Repair = repaire1, Part = part1 };
    _context.Add(repaire1);
    _context.Add(part1);
    _context.Add(reparePart1);
    _context.SaveChanges();

关于c# - 使用 Entity Framework Core 在具有多对多关系的数据透视表中插入新记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53972328/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com