使用 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
那样的
我不必context.Investments
喜欢那里
我正在尝试:
context.Entry(itemTypeItem).State = EntityState.Deleted;
公共虚拟区域模型区域{get;放; }
[CanBeNull]
但它没有帮助并导致更多错误。
我对实体框架不是很熟悉。任何人都可以给我建议。我应该分配 Area
虽然我不知道怎么做,因为我只在想要将某些内容保存到数据库时才创建此对象。为什么我没有帖子中的这些属性?
ET 6.4.4 网络 4.6.1
编辑:
我最终解决了这个问题,将 AreaModel 分配给了 Area。