2013-03-13 61 views
1

我曾嘗試通過EF5和MySQL進行示例。實體框架5代碼優先例外

[Table("agency")] 
class Agency 
{ 
    [Key] 
    [Required] 
    public int agency_id { get; set; } 
    public string name { get; set; } 
} 

class MyContext : DbContext 
{ 
    public DbSet<Agency> Agency { get; set; } 
} 

class Sample 
{ 
    public static void Main() 
    { 
     using (var db = new MyContext()) 
     { 
      var query = from x in db.Agency select x.agency_id; 
      var new_num = query.DefaultIfEmpty<int>().Max(p => p == null ? 0 : p); 

      new_num++; 

      Agency a = new Agency 
      { 
       agency_id = new_num, 
       name = "Test" 
      }; 

      db.Agency.Add(a); 
      db.SaveChanges(); 
     } 
    } 
} 

起初。它成功了。
但第二次,它在db.SaveChanges()中拋出異常。
{「key'PRIMARY'重複條目'0'}}

隨着拋出的異常,我追蹤變量。
agency_id當然有'1'。

出了什麼問題?

更新1

http://i46.tinypic.com/do7xj4.png

http://i46.tinypic.com/2rc0ci1.png

http://i49.tinypic.com/2enmhi8.png

更新2

!!!! ??????????? ????????????????

http://i48.tinypic.com/110euty.jpg

回答

0

好的,我找到了一個解決方案。

https://stackoverflow.com/a/6752692/415682

DatabaseGeneratedAttribute是點!

[Table("agency")] 
class Agency 
{ 
    [Required, Key, DatabaseGenerated(DatabaseGeneratedOption.None)] 
    public int my_id { get; set; } 
    public string name { get; set; } 
} 
0

試試這個:

 int new_num = 0; 
     if (db.Agency.Any()) 
     { 
      new_num = db.Agency.Max(a => a.agency_id) + 1; 
     } 
+0

這不是問題。 new_num值正確增加。 – 2013-03-13 10:21:02

+0

我認爲問題是在查詢最大標識符somwhere。第二次運行時,db.Agency是否爲空? – 2013-03-13 10:45:37

+0

SaveChanges時,我猜agency_id爲0 .. – 2013-03-13 11:07:33

0

可能的映射是不正確的。確保數據庫中ID的名稱是'agency_id'。

+0

截斷表後,它是成功的。agency_id是正確的。 – 2013-03-13 10:44:08

0

爲什麼你手動增加主鍵?我看到你正在使用MySQL。只需將其設置爲「自動增量」欄即可完成。看到這裏: http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html

試試這個,並停止手動分配agency_id ...它可以解決你的問題。

+0

我知道。但它只是樣品。我很好奇它爲什麼會拋出異常。 – 2013-03-13 11:10:21