我使用实体框架核心和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>

在查看了我的数据库之后,实体框架似乎没有将fieldId设置为auto incremental,但是我找不到强制它的方法。
我重新创建了数据库以查看它是否有用,但错误仍然发生,因此我怀疑我必须以某种方式修改迁移。

最佳答案

多亏了波美洛github的人,我才解决了这个问题。结果我不得不删除以前的所有迁移。对于那些有同样问题的人。
在vs的包管理器中,do:Update-Database 0(您必须返回
第一次迁移可以删除前一次的)
使用以下命令删除所有迁移:Remove-Migration
创建新迁移:Add-Migration migrationName
更新数据库:Update-Database
您也不需要[DatabaseGenerated(DatabaseGeneratedOption.Identity)][Key]

10-08 02:26