我使用实体框架核心和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
设置为自动增量,但我无法找到强制它的方法。
我重新创建了我的数据库以查看它是否有用,但错误仍然存在,所以我怀疑我必须以某种方式修改迁移。
答案 0 :(得分:2)
感谢pomelo的github上的人们,我能够解决问题。事实证明,我必须删除以前的所有迁移。对于那些有同样问题的人。
Update-Database 0
(你必须回去
第一次迁移,以便能够删除以前的一个Remove-Migration
Add-Migration migrationName
Update-Database
此外,您不需要[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
或[Key]
。