Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 避免Linq挂起插入的重复?_C#_Linq_Linq To Sql - Fatal编程技术网

C# 避免Linq挂起插入的重复?

C# 避免Linq挂起插入的重复?,c#,linq,linq-to-sql,C#,Linq,Linq To Sql,我可以防止同一对象被添加两次,但我仍然需要引用挂起的id来添加其他相关对象 在下面的示例中,SomeData中的某些disctinct项可能希望将同一个人添加两次。我可以跟踪它,但我仍然需要向未决人员添加不同的项目信息。我如何管理这个 foreach(item i in SomeData) { var x = dc.People.Where(p.someprop==a...); if (x=null) {

我可以防止同一对象被添加两次,但我仍然需要引用挂起的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()

基本上,您需要检查实体是否已附加到上下文。下面是一个示例,说明了如何实现这一点:

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);
        }

当你说distinct时,它的区别在于这个名字和姓氏id,如果是这样的话,你可以查看更多信息。