【问题标题】:Code First EF delete with Id only andCode First EF 仅使用 Id 删除和
【发布时间】:2013-08-03 02:08:11
【问题描述】:

我有以下代码:

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 as shown here 来使外键可以为空(仅供参考,我使用的是代码优先实体框架):

public class Symbol : EntityBase
{
    [Required]
    public string CompanyName { get; set; }

    public int? CategoryId { get; set; }

    [Required]
    public MarketCategory Category { get; set; }
}

但是,在创建迁移并更新数据库后,这并不能解决异常。

.

编辑 2

好吧,事实证明(现在回想起来很明显)添加“必需”属性可以防止列可以为空。现在我的意图是不允许编码器(即我)在代码中意外地将关系设置为 null,但允许框架在我通过 Id 删除对象时将其清空。看来这是做不到的。所以我需要做的就是删除所需的属性(并省略“categoryId”列)。

【问题讨论】:

    标签: entity-framework-5


    【解决方案1】:

    EF 必须生成外键关系。简单的检查方法是使用 SQL 服务器 managernt Studio 并检查表上的依赖关系

    【讨论】:

      【解决方案2】:

      为此,我认为Category 表的外键列(SymbolId, 不管...)应该是Nullable。您的数据库表的 OndDelete 操作也应设置为 null。

      然后,EF 可以简单地删除该符号。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-09-26
        • 2016-12-18
        • 2020-04-29
        • 2013-02-03
        • 1970-01-01
        • 2012-05-01
        • 1970-01-01
        • 2012-09-25
        相关资源
        最近更新 更多