【发布时间】:2021-02-02 02:25:03
【问题描述】:
这是我的模型(缩写)
用户:
public partial class User
{
public int Id { get; set; }
public virtual BusinessOwner BusinessOwner { get; set; }
//rest of code
}
和 BusinessOwner,它对用户有一个外键 (User.Id = BusinessOwner.UserId) 这意味着企业主必须是用户。
企业主:
public partial class BusinessOwner
{
public int UserId { get; set; }
public virtual User User { get; set; }
//rest of code
}
在一个场景中,我必须删除一个用户,所以我得到了用户并包含了这样的关系:
public User GetByIdEager(int id)
{
return _context.User.Where(u => u.Id == id && u.DeletedAt == null)
.Include(u => u.BusinessOwner)
.FirstOrDefault();
}
这是我的控制器:
public class UserController : ControllerBase
{
[HttpDelete("id")]
public ActionResult Delete(int id)
{
User user = GetByIdEager(id);
_context.User.Remove(user);
_context.SaveChanges();
return Ok();
}
}
调用_context.User.Remove(user);时出现以下异常
实体类型Users和BusinessOwners之间的关联已经 已被切断,但该关系要么标记为“必需”,要么 隐式需要,因为外键不可为空。如果 当需要关系时,应删除依赖/子实体 被切断,然后设置关系以使用级联删除
即使我在检索用户时包含了 BusinessOwner。有人能告诉我为什么会这样吗?我该如何解决?
【问题讨论】:
-
欢迎来到 Stack Overflow。请通过tour 了解 Stack Overflow 的工作原理,并阅读How to Ask 了解如何提高问题的质量。然后edit你的问题包含你的源代码作为minimal reproducible example,它可以被其他人编译和测试。
-
好的,感谢您指出这一点。 @Progman
-
你为这两个表设置了映射吗?
-
不,我想我不需要。当我调试并单击 User.BusinessOwner 时,我看到它已成功加载。为什么我需要映射? @osmanRahimi
标签: c# .net-core entity-framework-core entity-relationship ef-core-3.1