实体框架Core 2.0将int映射到SQL Server smallint会在查询时抛出异常

时间:2018-05-11 16:31:34

标签: c# entity-framework-core

我在SQL Server中将int属性映射到smallint。当我查询数据库时,我得到以下异常:

  

InvalidOperationException:发生异常时   读取属性' Tag.Count'的数据库值。预期的类型   是' System.Int32'但实际价值是'System.Int16'

类型

我想这样做,因为如果我在实体上使用short,我最终必须编写额外的代码来将short投射到int

相关代码快照:

public class Tag
{
    public int Count { get; set; }

    //Other properties
}

//In DbContext
protected override void OnModelCreating(ModelBuilder builder)
{
    builder.Entity<Tag>().Property(m => m.Count).HasColumnType("smallint");
}

//query
var tags = await context.Tags.ToArrayAsync();

1 个答案:

答案 0 :(得分:2)

int更改为int16SMALLINT为16位,int为32位。 因此32位不能转换为16位。您也可以使用short数据类型。

public class Tag
{
    public int16 Count { get; set; } 
    // or, 
   /* public short Count { get; set; } */

    //Other properties
}

//In DbContext
protected override void OnModelCreating(ModelBuilder builder)
{
    builder.Entity<Tag>().Property(m => m.Count).HasColumnType("smallint");
}

//query
var tags = await context.Tags.ToArrayAsync();