由于一个或多个外键属性不可为空,因此无法更改关系。 EF 与 POCO

时间:2021-02-09 08:31:20

标签: c# entity-framework

使用 POCO 创建数据库。我有两个像这样链接在一起的表:

public class AreaModel
{
    public int Id {get; set;}
    ...
}

public class AreaDataModel
{
    [DataMember]
    public int IdArea {get; set; }

    [ForeignKey ("IdArea")]
    public AreaModel Area {get; set; }

    ...
}

但它从不为“Area”属性分配任何内容。

我以这种方式删除行:

    public Task DeleteAllAsync(IEModel model)
    {
        return Task.Run(() =>
        {
            using (var context = database.CreateContext())
            {
                Type modelType = model.GetType();
                context.Database.ExecuteSqlCommand($"DELETE FROM [Device_{modelType.Name.Replace("Model","")}]");
                context.SaveChanges();
            }
        });
    }

当我在重新启动时从 AreaModel 和 AreaDataModel 表中删除所有内容并再次添加时,一切正常。但是现在我想保留“AreaModel”表中的数据,只删除“AreaDataModel”中的数据。不幸的是,它抛出了一个错误:

<块引用>

操作失败:无法更改关系,因为 一个或多个外键属性是不可为空的。当一个 对关系进行更改,相关的外键属性为 设置为空值。如果外键不支持空值, 必须定义新的关系,外键属性必须是 分配了另一个非空值,或者不相关的对象必须是 已删除。

context.SaveChanges(); 之后,当我尝试更新新添加的 AreaDataModels 时。 Context 是我的类继承者 DbContext。

我的上下文没有 context.Children 那样的

The relationship could not be changed because one or more of the foreign-key properties is non-nullable

我不必context.Investments喜欢那里

EF6.0 "The relationship could not be changed because one or more of the foreign-key properties is non-nullable"

我正在尝试:

context.Entry(itemTypeItem).State = EntityState.Deleted;

公共虚拟区域模型区域{get;放; }

[CanBeNull]

但它没有帮助并导致更多错误。

我对实体框架不是很熟悉。任何人都可以给我建议。我应该分配 Area 虽然我不知道怎么做,因为我只在想要将某些内容保存到数据库时才创建此对象。为什么我没有帖子中的这些属性?

ET 6.4.4 网络 4.6.1

编辑:

我最终解决了这个问题,将 AreaModel 分配给了 Area。

0 个答案:

没有答案
相关问题