EF代码优先更新不更新M:N关系中的记录

时间:2017-09-20 11:48:54

标签: c# entity-framework repository unit-of-work

我在更新M:N关系记录时遇到问题。我有实体Banner,它与实体BannerSection有M:N的关系。我通过multiselect添加部分,如下图所示。当我更改Banner实体的属性名称时,以及当我从多选框中添加另一个BannerSection时,Name属性会正确更新,但BannerBannerSection之间的耦合表是永远不会更新。

enter image description here

以下是我的存储库代码。我可以清楚地看到我的实体附加了BannerSection个记录,但仍然没有更新耦合表。知道是什么导致了这个问题吗?

public override void Update(Banner entity)
{
  using (var uow = provider.Create())
  {
    var objctx = ((IObjectContextAdapter)Context).ObjectContext;
    ObjectStateEntry entry;

    string entityName = ObjectContext.GetObjectType(entity.GetType()).Name;
    var container = objctx.MetadataWorkspace.GetEntityContainer(objctx.DefaultContainerName, DataSpace.CSpace);
    string entitySetName = (from meta in container.BaseEntitySets
        where meta.ElementType.Name == entityName
        select meta.Name).FirstOrDefault();

    if (string.IsNullOrEmpty(entitySetName))
        return;

    var EntityKey = objctx.CreateEntityKey(entitySetName, entity);


    if (objctx.ObjectStateManager.TryGetObjectStateEntry(EntityKey, out entry))
    {
        if (entry.State == EntityState.Detached)
        {
            objctx.AttachTo(EntityKey.EntitySetName, entry.Entity);
        }
        entry.ApplyCurrentValues(entity);
    }
    else
    {
        // Attach for the first time
        Context.Set<Banner>().Attach(entity);
        Context.Entry(entity).State = EntityState.Modified;
    }
    try
    {
        Context.SaveChanges();
        uow.Commit();
    }
    catch (Exception e)
    {
        Console.WriteLine(e);
        throw;
    }
  }
}

0 个答案:

没有答案