自动增量不适用于模型

时间:2017-06-25 09:19:28

标签: c# mysql entity-framework-core

我使用实体框架核心和mysql数据库。

我的模型看起来像这样:

public class User
{
    public int Id { get; set; }
    [Required]
    public string Name { get; set; }
}

当我尝试添加用户时,我得到Field 'Id' doesn't have a default value

var user = new User {
    Name = "Whatever"
};

_dbContext.Users.Add(user);
_dbContext.SaveChanges(); // Throws exception

当我调试它时,我可以看到我的用户的id值为-2147482647

InnerException  {MySql.Data.MySqlClient.MySqlException: Field 'Id' doesn't have a default value
   at MySql.Data.MySqlClient.MySqlDataReader.ActivateResultSet(ResultSet resultSet)
   at MySql.Data.MySqlClient.MySqlDataReader.<ReadFirstResultSetAsync>d__62.MoveNext()

我尝试使用[DatabaseGenerated(DatabaseGeneratedOption.Identity)][Key],但它没有做任何事情。 我生成的迁移如下所示:

    [DbContext(typeof(TetrominoContext))]
    [Migration("20170625090637_SixthMigration")]
    partial class SixthMigration
    {
        protected override void BuildTargetModel(ModelBuilder modelBuilder)
        {
            modelBuilder
                .HasAnnotation("ProductVersion", "1.1.2");

            modelBuilder.Entity("Tetromino.Models.User", b =>
                {
                    b.Property<int>("Id")
                        .ValueGeneratedOnAdd();

                    b.Property<string>("Name")
                        .IsRequired();

                    b.HasKey("Id");

                    b.ToTable("Users");
                });
        }
    }

我的包裹:

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore" Version="1.1.2" />
    <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="1.1.3" />
    <PackageReference Include="Microsoft.AspNetCore.NodeServices" Version="1.1.1" />
    <PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="1.1.2" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="1.1.2" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="1.1.1" />
    <PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="1.1.2" />
    <PackageReference Include="Microsoft.VisualStudio.Web.BrowserLink" Version="1.1.2" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="1.1.2" />
    <PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="1.1.2" />
  </ItemGroup>

在查看我的数据库后,看起来实体框架没有将字段Id设置为自动增量,但我无法找到强制它的方法。

我重新创建了我的数据库以查看它是否有用,但错误仍然存​​在,所以我怀疑我必须以某种方式修改迁移。

1 个答案:

答案 0 :(得分:2)

感谢pomelo的github上的人们,我能够解决问题。事实证明,我必须删除以前的所有迁移。对于那些有同样问题的人。

  1. 在vs的包管理器中执行:Update-Database 0(你必须回去 第一次迁移,以便能够删除以前的一个
  2. 删除所有迁移:Remove-Migration
  3. 创建新迁移:Add-Migration migrationName
  4. 更新db:Update-Database
  5. 此外,您不需要[DatabaseGenerated(DatabaseGeneratedOption.Identity)][Key]