Я использую базовое ядро сущности и базу данных 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
И когда я его отлаживаю, я вижу, что значение моего пользователя равно -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
как автоматическое инкрементное, но я не могу найти способ заставить его.
Я воссоздал свою базу данных, чтобы узнать, поможет ли она, но ошибка все еще происходит, поэтому я подозреваю, что мне нужно как-то модифицировать миграцию.
Благодаря людям в github pomelo я смог решить проблему. Оказывается, мне пришлось удалить все мои предыдущие миграции. Для тех, у кого такая же проблема.
Update-Database 0
(вам нужно вернуться к первой миграции, чтобы иметь возможность удалить предыдущие) Remove-Migration
Add-Migration migrationName
Update-Database
Также вам не нужно [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
или [Key]
.