xpa*_*asd 6 c# database sql-server entity-framework
如果将项目与多对多关系联系在一起,我就无法从数据库中删除项目
我的数据库看起来像
| [Project] | <-- | [JobInProject] | --> | [Job] |
============= ================== =========
| ProjectID | | JobInProjectID | | JobID |
| | | ProjectID | | |
| | | JobID | | |
Run Code Online (Sandbox Code Playgroud)
来自Project和Job表的主键也被设置为其他表中的外键,但是我认为这不是问题,因为当我从Job表中删除项目时,它会与其他表中的所有相关项目一起被正确删除。
所有外键均由约束设置,并在更新级联时在删除级联中设置
我用来删除工作项目的代码
Job job = await db.Jobs.FindAsync(id);
db.Entry(job).State = EntityState.Deleted;
await db.SaveChangesAsync();
Run Code Online (Sandbox Code Playgroud)
和项目:
Project project = await db.Projects.FindAsync(id);
db.Entry(project).State = EntityState.Deleted;
await db.SaveChangesAsync();
Run Code Online (Sandbox Code Playgroud)
删除项目项的代码仅删除Project表中的数据,而JobInProject表不删除Job和相关项。
当我修改代码以将其删除时Project:
Project project = await db.Projects.FindAsync(id);
foreach (var item in project.JobInProjects)
{
db.Entry(item.Job).State = EntityState.Deleted;
}
db.Entry(project).State = EntityState.Deleted;
await db.SaveChangesAsync();
Run Code Online (Sandbox Code Playgroud)
我在await db.SaveChangesAsync();网上遇到错误
操作失败:由于一个或多个外键属性不可为空,因此无法更改该关系。对关系进行更改时,相关的外键属性将设置为空值。如果外键不支持空值,则必须定义新的关系,必须为外键属性分配另一个非空值,或者必须删除不相关的对象。
如何删除Project物品和相关Job物品?
我将不胜感激
这是因为您没有将JobInProject对象标记为Deleted:
foreach (var item in project.JobInProjects)
{
db.Entry(item.Job).State = EntityState.Deleted;
db.Entry(item).State = EntityState.Deleted; // <= line added
}
Run Code Online (Sandbox Code Playgroud)
如果您不这样做,EF 将假定您不想删除该项目并尝试将两个外键设置为 to JobInProject,null但当然一个或多个外键属性不可为空(两者都不可为空) t)。
| 归档时间: |
|
| 查看次数: |
5620 次 |
| 最近记录: |