避免重复Linq挂起的插入

本文关键字:挂起 插入 Linq | 更新日期: 2023-09-27 18:28:57

我可以防止同一个对象被添加两次,但我仍然需要引用挂起的id来添加其他相关对象。

在下文中,SomeData中的一些disctinct项可能希望将同一个人添加两次。我可以跟踪它,但我仍然需要向挂起的人添加不同的项目信息。我该如何处理?

   foreach(item i in SomeData)
      {
         var x = dc.People.Where(p.someprop==a...);
         if (x=null)
         { 
           Person p = new P(..);
           dc.People.InsertOnSubmit(p);
         }
         ...
         ...
      }
      dc.Submitchanges()

避免重复Linq挂起的插入

基本上,您需要检查实体是否已经附加到上下文。下面是一个如何使其工作的例子:

public static void SafeAttachTo<T>(this ObjectContext context, string entitySetName, ref T entity) where T : class {
            ObjectStateEntry entry;
            bool isDetached;
            if (context.ObjectStateManager.TryGetObjectStateEntry(context.CreateEntityKey(entitySetName, entity), out entry)) {
                isDetached = entry.State == EntityState.Detached;
                entity = (T) entry.Entity;
            }
            else
                isDetached = true;
            if (isDetached)
                context.AttachTo(entitySetName, entity);
        }