7

我正在为数据库开发一个小型服务工具。我的问题是由于上次更新,一些 smallint-colums 必须更改为整数。

public class TEST
{
    public int ID { get; set; }
    //public Int16 ID { get; set; }
    public string TEST { get; set; }

}

我将类型从 Int16 更改为 int。一切正常,只是我不能再将它与旧版本的数据库一起使用。异常类似于“预期 System.Int32,发现 Typ System.Int16”。

有没有办法将所有 smallint 和 integer 转换为 int32?

有任何想法吗?我的环境:EntityFramework 5.0.0 .NET 4.5 FirebirdClient 3.0.2.0

我试图在模型构建器中强制转换:

        modelBuilder.Entity<TEST>()
        .Property(p => p.ID)
        .HasColumnType("smallint");

例外:

错误 2019:指定的成员映射无效。类型“ContextRepository.TEST”中成员“ID”的类型“Edm.Int32[Nullable=False,DefaultValue=]”与成员的“FirebirdClient.smallint[Nullable=False,DefaultValue=,StoreGeneratedPattern=Identity]”不兼容'CodeFirstDatabaseSchema.BUNDLAND' 类型中的'SCHLUESSEL'

将 ID 设为 Int16,然后将所有内容转换为 smallint (HasColumnType("int")) 工作正常,但如果数字大于 31767(smallint max),则会出现异常...

4

1 回答 1

11

我找到了解决我的问题的方法!我必须在我的模型中使用 Int16 并使用模型构建器将列类型设置为 smallint:

public class TEST
{
    public Int16 ID { get; set; }
}

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<TEST>().HasKey(a => new { a.ID});
    modelBuilder.Entity<TEST>()
    .Property(p => p.ID)
    .HasColumnType("SMALLINT");
    base.OnModelCreating(modelBuilder);
}

现在我可以毫无例外地将属性转换为 int (即使数字> 32767):

var lQry = (from b in ctData.TEST
    select new
    {
        ID = (int)b.ID,
    });
于 2013-08-12T14:29:04.467 回答