实体框架5代码优先例外

时间:2013-03-13 10:04:50

标签: c# mysql entity-framework code-first

我确实尝试通过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

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

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

4 个答案:

答案 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; }
}
相关问题