c#-ef核心一对多关系引发异常无法添加或更新子行
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c#-ef核心一对多关系引发异常无法添加或更新子行,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2134字,纯文字阅读大概需要4分钟。
内容图文
![c#-ef核心一对多关系引发异常无法添加或更新子行](/upload/InfoBanner/zyjiaocheng/691/26570d36bce14212a66fbf2e450c74bf.jpg)
我的商店和产品实体之间存在一对多关系,请查看我的模型
public class Product
{
public int ID { get; set; }
public string Name { get; set; }
public string Tag { get; set; }
public string Brand { get; set; }
public string Place { get; set; }
public int ShopID { get; set; }
public Shop Shop { get; set; }
}
public class Shop
{
public int ID { get; set; }
public string Name { get; set; }
public string Comment { get; set; }
public string Number { get; set; }
public ICollection<Product> Products { get; set; }
}
public class ShopContext : DbContext
{
public ShopContext(DbContextOptions<ShopContext> options) : base(options)
{
}
public DbSet<Shop> Shops { get; set; }
public DbSet<Product> Products { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Shop>().ToTable("shop");
modelBuilder.Entity<Product>().ToTable("product");
}
}
public class CreateModel : PageModel
{
private readonly ShopContext _context;
public CreateModel(ShopContext context)
{
_context = context;
}
public IActionResult OnGet()
{
ViewData["Shop"] = new SelectList(_context.Shops, "ID", "Name");
return Page();
}
[BindProperty]
public Product Product { get; set; }
public async Task<IActionResult> OnPostAsync()
{
if (!ModelState.IsValid)
{
return Page();
}
_context.Products.Add(Product);
await _context.SaveChangesAsync();
return RedirectToPage("./Index");
}
}
创建页面中的商店是一个下拉列表,当我将新产品发布到处理程序时,我可以看到该产品.ShopID是Shop表中存在的ID,而product.Shop.ID与product.ShopID相同.但是,当我调用saveChangesAsync()时,它将引发异常:
MySqlException:无法添加或更新子行:外键约束失败(shopdb.product,CONSTRAINT FK_product_shop_ShopID FOREIGN KEY(ShopID)参考DELETE CASCADE上的shop(ID))
我尝试在调用saveChangesAsync方法之前将product.Shop设置为null,但是仍然无法正常工作,有人可以帮忙吗?
ASP.NET Core 2.0 Razor Pages应用程序,
Nuget:Pomelo.EntityFrameworkCore.MySql v2.0.1
解决方法:
在Product表中将ShopID声明为可空,您正在执行product.Shop = null ;,因此它将尝试在此列中插入ShopID值null.由于您在Product表中的ShopID列不可为空,因此为什么会给出错误.因为Shop表中没有可为空的ID.因此其给定外键约束失败异常.因此,您所要做的就是像public int那样使用可为空的外键? ShopID.
内容总结
以上是互联网集市为您收集整理的c#-ef核心一对多关系引发异常无法添加或更新子行全部内容,希望文章能够帮你解决c#-ef核心一对多关系引发异常无法添加或更新子行所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。