2016-03-04 83 views
1

表「表」標識列無法插入顯式值我有簡單的DataTable收到錯誤:當IDENTITY_INSERT設置爲OFF

CREATE TABLE [dbo].[Table] (
[Id] INT  IDENTITY (1, 1) NOT NULL, 
[Name] NCHAR (10) NULL, 
PRIMARY KEY CLUSTERED ([Id] ASC) 
); 

其中一個記錄,Name="Test"Id獲取的自動0

當我使用的基本創建操作

[HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult Create(Table table) 
{ 
    if (ModelState.IsValid) 
    { 
     db.Table.Add(table); 
     db.SaveChanges(); 
     return RedirectToAction("Index"); 
    } 

    return View(table); 
} 

我得到錯誤:

Cannot insert explicit value for identity column in table 'Table' when IDENTITY_INSERT is set to OFF.

我做錯了什麼?如何解決這個錯誤?

表類

public partial class Table 
{ 
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 
+0

如果您首先使用數據庫方法,您爲什麼要手動生成模型,而不是使用實體數據模型自動生成模型(如下所示:https://www.asp.net/mvc/overview/getting-開始/數據庫先開發/製造最Web的應用程序) –

回答

1

您需要設置IsDbGeneratedtrue。添加System.Data.Linq到您的參考文獻,然後:

[System.Data.Linq.Mapping.Column(Storage = "Id", DbType = "Int NOT NULL IDENTITY", IsPrimaryKey = true, IsDbGenerated = true)] 
public int Id { get; set; } 
0

它聞起來像您從參數(Table table)檢索表比0財產Id設置其他值。

如果是這樣的話,如果你要更新的項目,如果存在要確保你之前db.Table.Add(table);

設置Id0,那麼你需要檢查Id0添加它之前。

if(table.Id == 0) 
    db.Table.Add(table); 
db.SaveChanges(); 
0
[DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
public int Id { get; set; } 

這爲我工作。

相關問題