2012-10-17 51 views
0

我試圖將一羣人插入到數據庫表中。我可以從數據庫沒有問題的選擇,但是當我試圖進入我得到無法使用linq插入數據庫

Cannot add an entity with a key that is already in use 

我知道這意味着什麼,但爲什麼它的發生。我有增量表上的ID。這是我的代碼。

public static List<Person> GetPeople(DataContext db) 
     { 
      List<Person> people = new List<Person>();    
      Table<Person> People = db.GetTable<Person>(); 

      for (int i = 0; i < 5; i++) 
      { 
       Person pers = new Person(); 
       pers.PersFirstName = "Wesley " + i;     
       //pers.PersId is the primary key that I want to auto-increment and not have to set it here 
       people.Add(pers);    
      } 
      People.InsertAllOnSubmit(people); 
      People.Context.SubmitChanges(); 

      IQueryable<Person> query = 
      from person in People 
      select person; 


      return people; 
     } 

的問題發生在該行

People.InsertAllOnSubmit(people); 

是否有一些特殊的辦法,我必須設置自動遞增的LINQ?

+2

您必須設置數據庫增加標識值。你有沒有設置'PersonId'是主鍵? – Kai

+0

是的,我已經完成了這個 –

+0

您是否在生成映射之前設置了pk?如果不重新創建映射文件。 – Kai

回答

2

在您的DBML設計師,點擊這是主鍵列,並確保下列屬性有下列值:

Auto Generated Value: True 
Auto-Sync: OnInsert 
Primary Key: True 

既然你不使用DBML設計師,你可以用參數完成它在你的field屬性的Column屬性上(除了你可能已經有的其他參數外)。

[Column(AutoSync=AutoSync.OnInsert, DbType="Int NOT NULL IDENTITY", IsPrimaryKey=true, IsDbGenerated=true)] 
+1

好東西。我沒有創建LINQ到SQL類,我創建了我自己的普通類。再次感謝 –

+0

@WesleySkeen - 我用非DBML方式更新了這些屬性。 – hatchet