【问题标题】:Entity Framework Core: can't delete last added entryEntity Framework Core:无法删除最后添加的条目
【发布时间】: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


【解决方案1】:

我认为你应该改变你的 ProjectModel 如下:

 public class Project
{
    public int Id { get; set; }
    [StringLength(50)]
    public string Title { get; set; }
    public Supervisor Supervisor { get; set; }  
    public int? SupervisorId {get;set;}
}

在编辑您的model 添加新迁移并更新您的数据库后,我认为这会解决您的问题。

【讨论】:

  • 很遗憾,这不起作用。
猜你喜欢
  • 1970-01-01
  • 2017-06-17
  • 2019-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-06
相关资源
最近更新 更多