2014-12-28 159 views
1

我使用Asp.net mvc 5和EF 6製作一個網絡應用程序。我開始與互聯網的應用程序模板,並添加這些類:實體框架6 Guid生成null?

public class Article 
{ 
    [Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public Guid ID { get; set; } 
    public string Tags { get; set; } 
    public string Name { get; set; } 
    public string Link { get; set; } 
    public string HtmlContent { get; set; } 
    [ForeignKey("ListaId")] 
    public Lista Lista { get; set; } 
    public Guid ListaId { get; set; } 
} 

public class List 
{ 

    public string Name { get; set; } 
    [Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public Guid ID { get; set; } 
    public int Status { get; set; } 
    public virtual ApplicationUser User { get; set; } 
    public string ApplicationUserId { get; set; } 
    public string Tags { get; set; } 
} 

但每次的NuGet包管理器更新數據庫,並運行種子的方法時,它試圖插入在數據庫中的文章下破壞。 這裏是在configuration.cs

 context.Lists.AddOrUpdate(new Lista 
     { 
      Name = "Technology", 
      ApplicationUserId = "f06b0d2e-2088-4cd7-8b1c-4fcad5619f3c", 
      Status = 1, 
      Tags = "Tech,News" 
     }); 
     context.SaveChanges(); 

     Lista l1 = context.Lists.Where(x => x.Status == 1).First(); 

     context.Articles.AddOrUpdate(new Article 
     { 
      ListaId = l1.ID, 
      Link = "www.abc.com", 
      Name = "ABC", 
      Tags = "c,test", 
      HtmlContent = "Hello World" 
     }); 
     context.SaveChanges(); //here it breaks 

內部異常種子方法信息:System.Data.SqlClient.SqlException:不能NULL值插入列 'ID',表「ASPNET-的webapp-20141022011020.dbo。文章;列不允許有空值。 INSERT失敗 如果我將[Key] adnotation從Article類中取出,並且如果採用[DatabaseGenerated(DatabaseGeneratedOption.Identity)] adnotation,則會出現以下錯誤:System.Data.SqlClient.SqlException:違規PRIMARY KEY約束'PK_dbo.Articles'。無法在對象'dbo.Articles'中插入重複鍵。重複鍵值是(00000000-0000-0000-0000-000000000000)。 在Guid的地方使用long/int,我得到一個更新數據庫錯誤,如:uniqueidentifier與bigint/int不兼容。

我該怎麼辦?爲什麼它不是用GUID生成一個合適的ID?

回答

3

你必須告訴數據庫你想要這樣的行爲。通常情況下,如果您使用代碼優先的方法,EF6足夠智能,它將能夠生成正確的行爲。

轉到數據庫,修改ID字段,並將其添加到默認值:newsequentialid()

如果你想創建的GUID自己:

public class Article 
{ 
    [Key] 
    public Guid ID { get; set; } 
    public string Tags { get; set; } 
    public string Name { get; set; } 
    public string Link { get; set; } 
    public string HtmlContent { get; set; } 
    [ForeignKey("ListaId")] 
    public Lista Lista { get; set; } 
    public Guid ListaId { get; set; } 

    public Article(){ 
     ID = Guid.NewGuid(); 
    } 

} 
+0

對不起...我添加NEWSEQUENTIALID()在哪裏? –

+0

@CristianDan;你可以嘗試在數據庫上運行這個SQL查詢:'ALTER TABLE dbo.TableName ADD CONSTRAINT DF_ColumnName DEFAULT newsequentialid()FOR ColumnName',用您的表/ ID列替換名稱。 –

+1

非常感謝..它的工作...我發現在哪裏寫newsequentialid():D謝謝 –