2016-02-03 62 views
2

我試圖設置一個複合主鍵,並且第二個鍵是年份。當IDENTITY_INSERT設置爲OFF時,不能插入標識列的顯式值

我在創建表的同時設置和構造自動生成的場,但我仍然得到這個錯誤:

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

全部三個部分的代碼,並設置如下。

[Table("Volunteer")] 
    public class Volunteer 
    { 

     [Key][Column(Order = 0)] 
     public int Id { get; set; } 

     [DisplayName("First Name")] 
     public string FirstName { get; set; } 

     [DisplayName("Last Name")] 
     public string LastName { get; set; } 

     [DisplayName("Team Mentored")] 
     public string TeamMentored { get; set; } 


     [Key][Column(Order = 1)] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
     public DateTime Year { get; set; } 
     public string TableNumber { get; set; } 
     public int OfficeId { get; set; } 
     public string Image { get; set; } 


    } 

CREATE TABLE [dbo].[Volunteer](
    [Id] [int] IDENTITY(1,1) NOT NULL, 
    [FirstName] [nvarchar](255) NULL, 
    [LastName] [nvarchar](255) NULL, 
    [TeamMentored] [nvarchar](255) NULL, 
    [Year] [date] DEFAULT(getdate()) NOT NULL, 
    [TableNumber] [nvarchar](50) NULL, 
    [OfficeId] [int] NOT NULL, 
    [Image] [nvarchar](max) NULL 
) 


public ActionResult Create([Bind(Include = "FirstName,LastName,TeamMentored,TableNumber,OfficeId,Image")] Volunteer volunteer) 
     { 
      try 
      { 

       if (ModelState.IsValid) 
       { 
        db.Volunteers.Add(volunteer); 
        db.SaveChanges(); 

        ModelState.Clear(); 
       } 

       // TODO: Add insert logic here 

       return RedirectToAction("Index"); 
      } 
      catch 
      { 
       ModelState.AddModelError("", "DB Update Failed!"); 
      } 

      return View(); 
     } 
+0

您是否使用EF Code First? – CodeNotFound

+0

是的,我正在使用EF代碼優先 –

回答

5

嘗試使用「Id」屬性上的屬性[DatabaseGenerated(DatabaseGeneratedOption.Identity)]。如果不這樣做,是否可以發佈任務代碼並保存?

+0

這仍然給我同樣的錯誤,我已經嘗試沒有[DatabaseGenerated(DatabaseGeneratedOption.Identity)]。 –

+0

您不應該爲「Id」屬性指定任何值,讓數據庫爲您生成值。 – llouk

+0

我沒有分配任何東西給Id或Year。 –

1

您的屬性[DatabaseGenerated(DatabaseGeneratedOption.Identity)]告訴Entity Framework(和SQL Server)該屬性將由數據庫使用自動遞增值自動生成。因此,你不能提供它的價值。

如果它可以工作,則必須將其移至Id屬性。它可能會工作,但我不能肯定地說,因爲我以前沒有使用過複合鍵。

如果您仍然收到錯誤,那是因爲數據庫已創建Year列設置爲int identity(1,1)。要麼手動編輯數據庫,要麼刪除它並用新的遷移重新創建它。

相關問題