1

我确实尝试通过 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() 中抛出了异常。
{"键 'PRIMARY' 的重复条目 '0'"}

随着抛出的异常,我跟踪变量。
Agency_id 有'1',当然。

什么问题?

更新 1

更新 2

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

4

4 回答 4

2

好的,我找到了解决方案。

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; }
}
于 2013-03-13T12:06:20.727 回答
0

试试这个:

        int new_num = 0;
        if (db.Agency.Any())
        {
            new_num = db.Agency.Max(a => a.agency_id) + 1;
        }
于 2013-03-13T10:08:29.663 回答
0

可能映射不正确。确保数据库中 id 的名称是“agency_id”。

于 2013-03-13T10:34:23.210 回答
0

为什么要手动增加主键?我看到你正在使用 MySQL。只需将其设为自动增量列并完成即可。见这里: http ://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html

试试这个并停止手动分配 Agency_id... 它可能会解决您的问题。

于 2013-03-13T11:07:03.433 回答