我正試圖添加到一個一對多的關系中。一旦我嘗試使用
來保存新創建的產品context.saveChangesAsync()
company.Products.Add(x)
它不允許我這樣做--我得到了一個例外:
它不允許我這樣做。
Microsoft.EntityFrameworkCore.DbUpdateConcurrencyException。預計資料庫操作將影響1行,但實際上影響了0行;自從物體被加載后,資料可能已經被修改或洗掉。
我搞不清楚它在哪里被修改。我希望你們能幫助我。謝謝。
public async Task<Result<ProductDto>> Handle(Command request, CancellationToken cancellationToken)
{
var company = await _context.Companies
.Include(x => x.Products)
.SingleOrDefaultAsync(a => a.UserId == _userAccessor.GetUserId() )。
if (company != null)
{
var productToAdd = new Product
{
Name = request.Product.Name,
描述 = request.Product.Description,
SalePrice = request.Product.SalePrice,
};
company.Products.Add(productToAdd);
var result = await _context.SaveChangesAsync() > 0;
if (! result)
return Result<ProductDto>.Failure(" failed to create product")。
}
return Result<ProductDto>.Success(request.Product)。
}
public class Product : BaseEntity
{
public Company 公司 { get; set; }
public Guid CompanyId { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public decimal SalesPrice { get; set; }
public decimal CostPrice { get; set; }
public int VatPercentage { get; set; } = 25;
}
public class Company : BaseEntity
{
public string CompanyName { get; set; }
public string Address { get; set; }
public string Zipcode { get; set; }
public string City { get; set; }
public string TaxId { get; set; }
public string UserId { get; set; }
public AppUser User { get; set; }
public ICollection<Product> 產品 { get; set; } = new List< Product> ();
}
我不知道為什么,似乎找不到問題所在,也不知道我做錯了什么。我的構建器關系被設定為:
modelBuilder.Entity("Domain.Entities.Company"/span>, b =>
{
b.Navigation("Products")。
});
b.HasOne("Domain.Entities.Company", "Company")
.WithMany("Products")
.HasForeignKey("CompanyId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired()。
b.Navigation("Company")。
uj5u.com熱心網友回復:
試試這個,這樣你就不需要使用.Include(x => x.Products)來加載所有產品的串列。它可以節省一些網路流量和時間。而且,添加到產品串列對一個新的公司也是有效的。當你加載一個現有的公司時,EF會跟蹤它,有時會給出一個例外。
if (company != null)
{
var productToAdd = new Product
{
CompanyId=company.Id,
Name = request.Product.Name,
描述 = request.Product.Description,
銷售價格 = request.Product.SalePrice,
};
_context.Products.Add(productToAdd);
var result = await _context.SaveChangesAsync();
if (result == 0)
return Result<ProductDto>.Failure(" failed to create product")。
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/323080.html
標籤:
