删除并添加具有相同键的项后,Entity Framework 6外键为null

时间:2015-10-05 13:37:04

标签: c# entity-framework

我有一个简单的缓存来快速访问我的应用程序的一些元信息。

public class CacheList
{
    [Key, Column(Order = 1)]
    public Guid Key1{ get; set; }
    [Key, Column(Order = 0)]
    public Guid Key0{ get; set; }

    public List<CacheItem> Items { get; set; }
    public List<CacheFolder> Folders { get; set; }
}

public class CacheItem
{
    [Key, Column(Order = 0)]
    public Guid Key3 { get; set; }
    [Key, Column(Order = 1)]
    public Guid Key4 { get; set; }

    public string Value { get; set; }
}

我会定期更新整个缓存。

为了简化它,我总是根据当前位置删除所有项目并创建新项目。

示例:

首先我删除所有相应的项目。 (列表本身也被删除并重新创建)

InsertContext.Items.RemoveRange(InsertContext.Items.Where(i => i.Key1 == key1.Id && i.ListId == key2.Id));

然后我将新项目添加到列表中

foreach (var item in items)
{
    var dbitem = new CacheItem()
    { };
    dbList.Items.Add(dbitem);
}

工作几乎完美......

我对外键字段有问题,它们是空的。

EF创建一个如下所示的插入语句:

Insert .... VALUES (@0, @1, @2, @3, @4, NULL, NULL)

如果我第一次缓存列表,它可以正常工作。从第二次运行开始,它的行为如上所述。

我很确定这是因为删除/添加交互,但我真的不知道如何解决问题。

当然我只能删除不再存在的项目并更新其余项目,但这会产生一些我想要阻止的开销。

整个过程在一个上下文中运行,最后一个SaveChanges

编辑:解决了问题:在将列表添加到上下文之前,我完成了对列表及其子元素的所有操作。

0 个答案:

没有答案