如何解决当我尝试以一对一关系添加新对象时,EF Core 更新先前的对象 ID 值
我使用代码优先的方法,我有 2 个表处于一对一关系。 我正在尝试在表 MaterialRelease 和 OrderMaterialRelease 中添加 2 条记录 在表 MaterialRelease 中记录添加成功,但在表 OrderMaterialRelease 中添加第一条记录,然后第二条记录更新第一条记录 id
public partial class MaterialRelease
{
public int MaterialReleaseId { get; set; }
public int MaterialCategoryId { get; set; }
public int MaterialId { get; set; }
public int? MaterialTypeId { get; set; }
public int? MaterialReleaseSizeId { get; set; }
public int Quantity { get; set; }
public string Notes { get; set; }
public int ReasonId { get; set; }
public int? ByOrderOfLeaderId { get; set; }
public int DepartmentId { get; set; }
public int SortNo { get; set; }
public bool IsEnabled { get; set; }
public bool IsDeleted { get; set; }
public int CreatedUserId { get; set; }
public DateTime AdditionTime { get; set; }
public virtual OrderMaterialRelease OrderMaterialRelease { get; set; }
public virtual Department Department { get; set; }
public virtual Material Material { get; set; }
public virtual MaterialCategory MaterialCategory { get; set; }
public virtual MaterialReleaseReasons MaterialReleaseReasons { get; set; }
public virtual MaterialSize MaterialReleaseSize { get; set; }
public virtual MaterialType MaterialType { get; set; }
public virtual User CreatedUser { get; set; }
public virtual User ByOrderOfLeader { get; set; }
}
public partial class OrderMaterialRelease
{
public int OrderId { get; set; }
public int MaterialReleaseId { get; set; }
public int? ProductId { get; set; }
public int? ProductCombinedId { get; set; }
public decimal Quantity { get; set; }
public decimal WastQuantity { get; set; }
public int SortNo { get; set; }
public bool IsEnabled { get; set; }
public bool IsDeleted { get; set; }
public int CreatedUserId { get; set; }
public DateTime AdditionTime { get; set; }
public virtual Order Order { get; set; }
public MaterialRelease MaterialRelease { get; set; }
public virtual Product Product { get; set; }
public virtual ProductCombined ProductCombined { get; set; }
public virtual User User { get; set; }
}
添加到数据库的函数
private void MaterialReleaseProduct(Order order)
{
foreach (var orderProduct in order.OrderProduct)
{
if (orderProduct.Product.Material != null)
{
var noSSizeInBSize =
GlobalData.unitOfWork.MaterialSizeConversion
.SingleOrDefault(e =>
e.SmallSizeId == orderProduct.Product.MaterialSizeId
&& e.BigSizeId == orderProduct.Product.ReleaseSizeId)
.NoSSizeInBSize;
var originalQuantity = orderProduct.Quantity / noSSizeInBSize;
var wastQuantity = originalQuantity * (orderProduct.Product.MaterialWastRatio ?? 0) / 100;
var quantity = (int) Math.Ceiling(originalQuantity + wastQuantity);
var materialRelease = new MaterialRelease
{
MaterialCategory = orderProduct.Product.MaterialCategory,Material = orderProduct.Product.Material,MaterialReleaseSize = orderProduct.Product.ReleaseSize,MaterialType = orderProduct.Product.MaterialType,Quantity = quantity,Department = orderProduct.Product.Department,ReasonId = 1,CreatedUser = GlobalData.LoginUser,};
var orderMaterialRelease = new OrderMaterialRelease
{
Order = order,MaterialRelease = materialRelease,Product = orderProduct.Product,Quantity = originalQuantity,WastQuantity = wastQuantity,User = GlobalData.LoginUser
};
GlobalData.unitOfWork.OrderMaterialReleases.Add(orderMaterialRelease);
GlobalData.unitOfWork.Complete();
}
}
}
public int Complete()
{
return _context.SaveChanges();
}
配置
public void Configure(EntityTypeBuilder<OrderMaterialRelease> builder)
{
builder.HasKey(e => e.MaterialReleaseId);
builder.HasIndex(e => new
{
e.OrderId,e.ProductId,e.ProductCombinedId,}).IsUnique();
builder.Property(e => e.AdditionTime).HasDefaultValueSql("GETDATE()");
builder.Property(e => e.IsEnabled).HasDefaultValueSql("1");
builder.Property(e => e.IsDeleted).HasDefaultValueSql("0");
builder.HasOne(e => e.MaterialRelease)
.WithOne(e => e.OrderMaterialRelease)
.HasForeignKey<OrderMaterialRelease>(e => e.MaterialReleaseId)
.OnDelete(DeleteBehavior.Restrict);
builder.HasOne(e => e.Product)
.WithMany(e => e.OrderMaterialRelease)
.HasForeignKey(e => e.ProductId)
.OnDelete(DeleteBehavior.Restrict);
builder.HasOne(e => e.ProductCombined)
.WithMany(e => e.OrderMaterialRelease)
.HasForeignKey(e => e.ProductCombinedId)
.OnDelete(DeleteBehavior.Restrict);
}
数据库中的记录 物料发布表
MaterialReleaseId MaterialCategoryId MaterialId MaterialTypeId MaterialReleaseSizeId Quantity Notes ReasonId ByOrderOfLeaderId DepartmentId SortNo IsEnabled IsDeleted CreatedUserId AdditionTime
91 1 1 2 2 2 NULL 1 NULL 1 0 1 0 2 2021-05-06 09:33:36.4670000
92 1 1 3 2 2 NULL 1 NULL 1 0 1 0 2 2021-05-06 09:33:36.5100000
订购材料发布
OrderId ProductId Quantity WastQuantity SortNo IsEnabled IsDeleted CreatedUserId AdditionTime MaterialReleaseId ProductCombinedId
61 4 1.00 0.02 0 1 0 2 2021-05-06 09:33:36.5330000 92 NULL
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。