2016-12-08 5 views
0

Ich habe eine Entität mit einer Int-Eigenschaft, die ich als tinyint in Sql Server gespeichert werden soll. Das habe ich mit der flüssigen api erfolgreich geschafft.Spezifizierende Spalte TypeName EntityFramework Core löst InvalidCastException

Allerdings, wenn ich die Datenbank abfragen, bekomme ich InvalidCastException: Specified cast is not valid.

Mein (vereinfacht) Code:

public class Category 
{ 
    public int Id { get; set; } 

    public int Level { get; set; } 

    public string Name { get; set; } 
} 

public class ProductContext : DbContext 
{ 
    public DbSet<Category> Categories { get; set; } 

    protected override void OnModelCreating(ModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<Category>() 
      .Property(m => m.Level) 
      .HasColumnType("tinyint"); 

     base.OnModelCreating(modelBuilder); 
    } 
} 

Wenn ich die Level Eigenschaft Typ byte ändern, ich die Ausnahme nicht bekommen.

Was mache ich falsch?

Antwort

2

Es ist, weil Entity-Framework tinyint zu einem Byte in Dotnet ordnet. Sie müssen Byte verwenden.

Mehr hier: https://stackoverflow.com/a/22714283/1932945

+0

so was ist dann der Zweck der 'modelBuilder.Entity () .Property (m => m.Level) .HasColumnType ("tinyint");'? –

+0

Manchmal kann ein C# -Typ einer von mehreren SQL-Typen sein (z. B. Zeichenfolge könnte CHAR oder VARCHAR oder NVARCHAR sein), daher kann es erforderlich sein, den SQL-Spaltentyp anzugeben. – SBFrancies

Verwandte Themen