2012-11-22 249 views
3

是這些問題中的另一個。我已經看過這裏,但無濟於事。
這是我的情況。
我啓動了一個ASP網站,最初使用的是SQLce。由於託管人不支持,結果變得很糟糕。我通過Web Matrix方法將sdf文件轉換爲SQL Server 2012 db。數據庫都很好,一切都可以讀取數據。當我嘗試寫任何東西到表中時,問題就出現了。 VS出現時說:
當IDENTITY_INSERT設置爲OFF時,無法在表'組'中爲標識列插入顯式值。
現在..它以前都很甜蜜。這裏是我設置的一個故事的例子:EF:當IDENTITY_INSERT設置爲OFF時,無法在表'組'中爲標識列插入顯式值

Column1: ID - Int - Primary key. - Identity specification yes, with a increment of 1 
Column2: GroupName - nvarchar(100) - just a normal text field 

然後。它在哪裏扼殺:

 using (SLEntities context = new SLEntities()) 
     { 
      var namecheck = (from n in context.Groups 
          where n.GroupName == newname 
          select n).Count(); 

      if (namecheck > 0) 
      { 
       // the name already exists.. return 
       lab_Error.Text = newname + " is already in the database. Please use another name"; 
       return; 
      } 

      // namecheck is new.. add to db 
      Group g = new Group(); 
      g.GroupName = newname; 
      context.Groups.Add(g); 
      context.SaveChanges(); 
     } 

它死於savechanges()。
我的問題是我該如何解決這個問題? (我看到IDENTITY_INSERT ON的東西,但不是,當你只創建表?)或者,而不是使用和自動遞增ID,另一種方式是什麼?

回答

4

轉到您的數據模型並驗證標識列的「StoreGeneratedPattern」屬性是否被有效設置爲「標識」。

+1

太棒了..這個固定它..你的傳奇 – Tony

0

在DB中創建表時,如果您已將IDENTITY_INSERT放在任何列上,則在從代碼插入數據時不需要爲該列提供值。

例如: -

CREATE TABLE dummy(id int identity(1,1), data varchar(100)) 

Insert into dummy values('First row')// it will work 

Insert into dummy values(1,'First row')// it will give error 

所以更好的方法是同時插入從代碼中提列名的數據也

Insert into dummy(data) values('First row') 

否則,你可以這樣做(: - 此將允許您將值插入標識列)

SET IDENTITY_INSERT dummy ON 
INSERT INTO dummy(id, data) VALUES(3, 'garden shovel') 

你應該先查看這篇文章: - http://msdn.microsoft.com/en-us/library/aa259221(v=sql.80).aspx

相關問題