实体框架:在Update表中插入外键行

时间:2017-01-30 15:13:34

标签: c# entity-framework-6 repository-pattern

通过使用Entity Framework 6以及存储库模式,我正在尝试更新一行,其中现有行具有与之关联的新外键对象。例如,Person记录已存在。 Person获得新的Dog。所以现在Person类实例化了Dog属性并填充了数据。

这是我的更新方法:

public async Task<TObject> UpdateAsync(TObject updated, int key)
{
    if (updated == null)
        return null;

    var existing = await this._context.Set<TObject>().FindAsync(key);
    if (existing != null)
    {
        this._context.Entry(existing).CurrentValues.SetValues(updated);
    }

    await this._context.SaveChangesAsync();

    return existing;
}

我通过以下方式来称呼它:

personRecord.Dog = new Dog () { Name = "Max", Age = 7 };
await this.PersonRepository.UpdateAsync(personRecord, personRecord.Id)

但是没有新的Dog记录插入到数据库中。我做错了什么?

1 个答案:

答案 0 :(得分:0)

您检查了实体人和实体狗的状态吗?

在saveChange()到

之前,实体状态必须处于修改状态或创建状态

执行插入

您可以使用

查看此状态

context.Entry(person).State