我在更新M:N关系记录时遇到问题。我有实体Banner
,它与实体BannerSection
有M:N的关系。我通过multiselect添加部分,如下图所示。当我更改Banner
实体的属性名称时,以及当我从多选框中添加另一个BannerSection
时,Name属性会正确更新,但Banner
和BannerSection
之间的耦合表是永远不会更新。
以下是我的存储库代码。我可以清楚地看到我的实体附加了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;
}
}
}