当我将列表设置为新的List <t>();?</t>时,为什么我的列表包含其原始项目

时间:2014-02-06 14:23:24

标签: c# entity-framework

我有两个实体:WorkCategoryCertificate

工作类别有很多证书。

我有一种将证书保存到工作类别的方法:

    public void AddInductionCertificatesToWorkCategory(InductionWorkCategory workCategory, List<Certificate> certificates)
    {
        workCategory.Certificates = new List<Certificate>();

        foreach (var certificate in certificates)
        {
            var dbCertificate = _db.Certificates.Single(v => v.Id == certificate.Id);
            workCategory.Certificates.Add(dbCertificate);
        }

        _db.InductionWorkCategories.Attach(workCategory);
        _db.Entry(workCategory).State = EntityState.Modified;

        _db.SaveChanges();
    }

唯一相关的行是第一行:workCategory.Certificates = new List<Certificate>();执行此行时,workCategory.Certificates仍有原始项目。

使这种情况发生的EF /动态代理是什么?

此外,如果我在该行上设置断点并查看该集合,则可以正常工作。

编辑:我不是在寻找解决方案或解决问题,我只是对在幕后发生的事情感到好奇。

干杯

1 个答案:

答案 0 :(得分:0)

如果公开ObjectContext,则可以强制刷新语句。它看起来像这样。

_DbContext.ObjectContext.Refresh(System.Data.Objects.RefreshMode.ClientWins, workCategory);