Io uso il database di entità framework e il database mysql.
Il mio modello assomiglia a questo:
public class User
{
public int Id { get; set; }
[Required]
public string Name { get; set; }
}
Quando provo ad aggiungere un utente, il Field 'Id' doesn't have a default value
var user = new User {
Name = "Whatever"
};
_dbContext.Users.Add(user);
_dbContext.SaveChanges(); // Throws exception
E quando -2147482647
debug, posso vedere che il valore ID del mio utente è -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()
Ho provato a utilizzare [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
e [Key]
, ma non ha fatto nulla. La mia migrazione generata si presenta così:
[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");
});
}
}
I miei pacchetti:
<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>
Dopo aver guardato il mio database sembra che il framework di entità non imposti l' Id
campo come auto-incrementale, ma non riesco a trovare un modo per forzarlo.
Ho ricreato il mio database per vedere se sarebbe stato d'aiuto, ma l'errore si verifica ancora, quindi sospetto di dover modificare la migrazione in qualche modo.
Grazie a persone al Github di Pomelo sono stato in grado di risolvere il problema. Si scopre che ho dovuto rimuovere tutte le mie precedenti migrazioni. Per quelli che hanno lo stesso problema.
Update-Database 0
(devi tornare alla prima migrazione per poter rimuovere quelli precedenti) Remove-Migration
Add-Migration migrationName
Update-Database
Inoltre non è necessario [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
né [Key]
.