我使用实体框架核心和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>
在查看了我的数据库之后,实体框架似乎没有将field
Id
设置为auto incremental,但是我找不到强制它的方法。我重新创建了数据库以查看它是否有用,但错误仍然发生,因此我怀疑我必须以某种方式修改迁移。
最佳答案
多亏了波美洛github的人,我才解决了这个问题。结果我不得不删除以前的所有迁移。对于那些有同样问题的人。
在vs的包管理器中,do:Update-Database 0
(您必须返回
第一次迁移可以删除前一次的)
使用以下命令删除所有迁移:Remove-Migration
创建新迁移:Add-Migration migrationName
更新数据库:Update-Database
您也不需要[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
或[Key]
。