2017-05-17 39 views
1

有在MS SQL数据库表中的int ID列,但实体类包含一个long ID字段,以及我的背景下,得到以下信息:实体框架:如何将Int64字段映射到Int32数据库列?

“,而读取数据库值中出现的异常。期望的 类型为'System.Int64',但实际值为 'System.Int32'。“

我已经尝试设置列类型:

modelBuilder.Entity<XXXEntity>() 
      .Property(b => b.Id) 
      .HasColumnName("XXXId") 
      .HasColumnType("int"); 

,但不起作用。 什么是正确的解决方案?

我不能更改实体类和数据库表。

+0

将long id字段更改为int? – Ppp

+0

我无法改变它 – Aaaaaaaa

+0

强制它通过使用'Convert.ToInt32(myLongIdField)'为int。但是为什么程序不允许你长插入int类型的列是有效的。只有当你确信你的“长”数据不会太大时才使用它。 – Ppp

回答

1

你应该SQL服务器上映射Int64bigint

modelBuilder.Entity<XXXEntity>() 
      .Property(b => b.Id) 
      .HasColumnName("XXXId") 
      .HasColumnType("bigint"); 

UPDATE: 由于您的SQL列数据类型为int,你应该改变你的Id数据类型里面XXXEntityInt32

+0

谢谢,但结果相同。 – Aaaaaaaa

+0

@Aaaaaaaa SQL Server上XXXId列的实际**类型是什么? –

+0

int,正如我写的 – Aaaaaaaa

0

未经测试。但可以试试吗?

public long id { get { return id; } set { id.GetType() == typeof(Int64) ? id : Convert.ToInt64(id); }} 
相关问题