【问题标题】:Type mapping between SQL Server 2008 and LINQSQL Server 2008 和 LINQ 之间的类型映射
【发布时间】:2023-03-09 00:05:01
【问题描述】:

我的问题专门涉及 SQL Server 2008 和 .NET 3.5 实体框架之间的数字类型映射。

我为一家在设计数据库方面有相当严格规则的公司工作。所述规则由 DBA 强制执行,他对表的大小没有超出所需的大小感到神经质。例如,他坚持认为,在适当的情况下,我们将数字列保留为 tinyint 和 smallint。

EF 映射这样的数字类型(左侧为 SQL Server 类型,右侧为 .NET 类型):
tinyint -> 字节
smallint -> Int16
int -> int
bigint -> Int64

我之所以担心,是因为我最近做了一些阅读,发现 .NET 运行时已针对 Int32 进行了优化。 This Stackoverflow 上的问题真的很深入人心,如果有人想对其进行阅读的话。

我的问题是:既然 EF 将 smallint 映射到 Int16,我应该克服优化问题并在代码中使用 Int16 成员变量,还是有其他解决方案可以让我使用Int32 类型在代码中仍然可以在 SQL Server 中使用 smallint 类型?我可以自己想到一两个解决方案,但它们似乎都以“优化”的名义过度。

【问题讨论】:

  • 我不确定这一点,但我想您可以将模型中的属性类型更改为 in32,只要您不发送大于 int16 最大值的值,一切都应该没问题.
  • @ryudice - 不幸的是,这不起作用......或者至少不适用于 LINQ to Entities(它可能适用于 LINQ to SQL??)。我试过了,它对我很生气。

标签: entity-framework sql-server-2008 .net-3.5 types


【解决方案1】:

如果这是 LINQ to SQL 而不是 LINQ to Entities,您可以更改映射的类型,唯一的问题是,如果您最终得到的值大于 smallint 列可以处理的值(但那么这就是一个整体'无论如何都不是问题,我想)。

但是 LINQ to Entities 验证器不允许这种“不匹配”。

【讨论】:

  • 如果我进入 ORM(EDMX)并手动将 Int16 的类型更改为 Int32,然后重新编译,我会收到一个错误,基本上说关系类型未正确映射。
  • 啊,看起来这对于 LINQ to SQL 来说是可能的。对不起
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-27
  • 2010-10-06
  • 1970-01-01
  • 2010-12-30
  • 1970-01-01
  • 1970-01-01
  • 2010-11-26
相关资源
最近更新 更多