我确实尝试通过EF5和MySQL制作样本。
[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()中引发了异常
{“重复输入'0'用于键'PRIMARY'”}
抛出异常后,我追踪变量 当然,agency_id有'1'。
出了什么问题?
更新1
http://i46.tinypic.com/do7xj4.png
http://i46.tinypic.com/2rc0ci1.png
http://i49.tinypic.com/2enmhi8.png
更新2
!!!! ???????????????????????????
答案 0 :(得分:0)
试试这个:
int new_num = 0;
if (db.Agency.Any())
{
new_num = db.Agency.Max(a => a.agency_id) + 1;
}
答案 1 :(得分:0)
可能映射不正确。确保数据库中id的名称是“agency_id”。
答案 2 :(得分:0)
为什么要手动递增主键?我看到你正在使用MySQL。只需将其设为自动增量列即可完成。看这里: http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html
尝试此操作并停止手动分配agency_id ...它可以解决您的问题。
答案 3 :(得分: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; }
}