Ich benutze Entity Framework Core und MySQL-Datenbank.
Mein Modell sieht so aus:
public class User
{
public int Id { get; set; }
[Required]
public string Name { get; set; }
}
Wenn ich versuche, einen Benutzer hinzuzufügen, bekomme ich Field 'Id' doesn't have a default value
var user = new User {
Name = "Whatever"
};
_dbContext.Users.Add(user);
_dbContext.SaveChanges(); // Throws exception
Und wenn ich es -2147482647
kann ich sehen, dass der ID-Wert meines Benutzers -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()
Ich versuchte mit [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
und [Key]
, aber es hat nichts getan. Meine generierte Migration sieht folgendermaßen aus:
[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");
});
}
}
Meine Pakete:
<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>
Nachdem ich meine Datenbank angeschaut habe, sieht es so aus, als ob das Entity-Framework die Feld- Id
als autoincremental setzt, aber ich finde keine Möglichkeit, es zu erzwingen.
Ich habe meine Datenbank neu erstellt, um zu sehen, ob sie helfen würde, aber der Fehler tritt immer noch auf, daher vermute ich, dass ich die Migration irgendwie modifizieren muss.
Dank der Leute bei Pomelo's GitHub konnte ich das Problem lösen. Es stellt sich heraus, dass ich alle meine vorherigen Migrationen entfernen musste. Für diejenigen, die das gleiche Problem haben.
Update-Database 0
(Sie müssen zurück zur ersten Migration gehen, um vorherige zu entfernen) Remove-Migration
Add-Migration migrationName
Update-Database
Sie benötigen auch nicht [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
oder [Key]
.