【发布时间】:2022-01-20 23:09:52
【问题描述】:
我有一个问题,我无法删除最后添加的条目。
这些是我的课程:
public class Project
{
public int Id { get; set; }
[StringLength(50)]
public string Title { get; set; }
public Supervisor? Supervisor { get; set; }
}
public class Supervisor
{
public string Id { get; set; }
[StringLength(50)]
public string Name {get; set;}
[StringLength(255)]
[EmailAddress]
public string Email {get; set;}
public ICollection<Project>? Projects {get; set;} = new HashSet<Project>();
}
想法是一个Supervisor可以有多个项目,每个项目有一个Supervisor。
但是当我尝试删除添加到数据库的最后一个项目时,我得到了这个错误:
Microsoft.EntityFrameworkCore.Update[10000]
保存上下文类型“PB.Infrastructure.ApplicationDbContext”的更改时数据库中发生异常。
Microsoft.EntityFrameworkCore.DbUpdateException:保存实体更改时出错。有关详细信息,请参阅内部异常。
Microsoft.Data.Sqlite.SqliteException (0x80004005):SQLite 错误 19:'FOREIGN KEY 约束失败'。
PB.Infrastructure.ApplicationDBContext 是我的DbContext。
这是我的删除方法:
public async Task<Response> DeleteAsync(int projectID)
{
var entity = await _context.Projects.FindAsync(projectID);
if (entity == null)
{
return Response.NotFound;
}
_context.Projects.Remove(entity);
await _context.SaveChangesAsync();
return Response.Deleted;
}
该错误仅在我尝试删除最后添加的项目时发生,我可以删除任何其他项目而不会出现任何问题。如果我将新项目添加到另一个主管,我什至可以删除主管最后添加的项目。
我正在使用 SQLite 数据库运行 .NET 版本 6.0.101 和 Entity Framework Core 版本 6.0.1。
任何解决此问题的帮助将不胜感激,在此先感谢。
【问题讨论】:
-
在我看来,您的数据库上下文中还有其他类,而不仅仅是主管。或者由于您隐式创建了数据库,Ef 可以添加一些您不知道的列。在您的班级中创建所有列,而不是依赖于 EF,这始终是一个好主意。
-
@Serge 谢谢,我最后检查了表格,发现 EF 在另一个类中创建了一对多关系而不是多对多关系,这导致了这个问题
标签: c# sqlite .net-core entity-framework-core .net-6.0