实体框架更新两个具有一对多关系的表

时间:2016-02-04 11:02:51

标签: c# entity-framework

我首先使用EF代码来控制我的数据。我有两个模型,ElectricitySiteElectricitySiteSplit

ElectricitySite包含List<ElectricitySiteSplits> ElectricitySiteSplits,这是一对多关系。

我试图为存储库层编写我的Update方法,它将处理这两个表,到目前为止我有:

public void UpdateElectricitySite(ElectricitySite updatedElectricitySite)
{
    var dbElectricitySite = GetElectricitySite(updatedElectricitySite.ElectricitySiteId);

    _context.ElectricitySites.Attach(updatedElectricitySite);
    _context.Entry(updatedElectricitySite).State = EntityState.Modified;

    _context.SaveChanges();
}

单击“保存”按钮时出现以下错误:

  

附加类型的实体   &#39; MySolution.Repo.ElectricityModels.ElectricitySiteSplit&#39;失败   因为同一类型的另一个实体已经具有相同的主要实体   核心价值。使用&#39;附加&#39;方法或设置   一个实体的状态为“未变”&#39;或者&#39;修改&#39;如果有任何实体   图表具有冲突的键值。这可能是因为一些   实体是新的,尚未收到数据库生成的密钥   值。在这种情况下,请使用&#39;添加&#39;方法或“添加”#39;实体国家   跟踪图形,然后将非新实体的状态设置为   &#39;不变&#39;或者&#39;修改&#39;酌情。

我认为这是因为我没有附加我的ElectricitySiteSplit实体,但是如果我在我的ElectricitySites附件中添加它:

_context.ElectricitySiteSplits.Attach(updatedElectricitySite.SiteSplits);

我收到此错误:

  

严重级代码描述项目文件行抑制状态   错误CS1503参数1:无法转换   &#39; System.Collections.Generic.List&#39;   到&#39; UtilityBilling.Repo.ElectricityModels.ElectricitySiteSplit&#39;

如何处理ElectricitySiteSplits中包含的updatedElectrcitiySite.SiteSplits表格更新作为列表。

仅供参考 - 我已经看过这里了:

Entity Framework 5 Updating a Record

https://msdn.microsoft.com/en-gb/data/jj592676.aspx

1 个答案:

答案 0 :(得分:2)

EF不会自动处理这两个表。我必须指定添加/更新/删除的项目。看一下这个帖子Cleanly updating a hierarchy in Entity Framework

希望这有帮助!