我有以下代码:
public void Remove(Guid id)
{
var symbol = new Symbol()
{
Id = id
};
_ctx.Entry(symbol).State = EntityState.Deleted;
_ctx.SaveChanges();
}
符号实体有一个称为“类别”的相关实体。它没有设置为级联删除,因为它是查找表中的值。我想单独留下类别,但是当它运行时会引发 DbUpdateException: “HourlyContext.Symbols”中的实体参与“Symbol_Category”关系。找到 0 个相关的“Symbol_Category_Target”。1 'Symbol_Category_Target' 是预期的。
我知道 EF 对如何处理这种关系感到困惑,我怎么能告诉它简单地放弃对 Category 的引用并继续删除 Symbol?
谢谢。
.
编辑
好的,所以我尝试通过添加一个可以为空的 CategoryId 来使外键可以为空(仅供参考,我使用的是代码优先实体框架),如下所示:
public class Symbol : EntityBase
{
[Required]
public string CompanyName { get; set; }
public int? CategoryId { get; set; }
[Required]
public MarketCategory Category { get; set; }
}
但是,在创建迁移并更新数据库后,这并不能解决异常。
.
编辑 2
好的,事实证明(现在回想起来很明显)添加“必需”属性可以防止列可以为空。现在我的意图是不允许编码器(即我)在代码中意外地将关系设置为空,但允许框架在我通过 Id 删除对象时将其清空。看来这是做不到的。所以我需要做的就是删除所需的属性(并省略“categoryId”列)。