2011-02-02 42 views
2

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

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

的EF映射数值类型像这样(在左侧SQL服务器类型,.NET类型上右):
TINYINT - >字节
SMALLINT - >的Int16
INT - >Int
bigint - >Int64

我的担心是由于我最近做了一些阅读并发现.NET运行时被优化以与Int32一起使用。 This关于Stackoverflow的问题真的进入了它的内心,任何人都想要做一个读取它。

我的问题是这样的:由于EF将smallint映射到Int16,我是否应该考虑优化问题并在代码中使用Int16成员变量,还是有其他解决方案可以让我使用Int32键入代码并仍然可以在SQL Server中使用smallint类型?我可以自己想想一个或两个解决方案,但它们都以“优化”的名义看起来过于夸张。

+1

我不知道这个,但我想你可以只改变你的模型中的属性的类型为in32,只要你不发送大于int16的值最大值一切都应该没问题。 – ryudice 2011-02-02 23:45:54

+0

@ryudice - 不幸的是,这不起作用...或者至少不与LINQ to Entities(它可能适用于LINQ to SQL?)。我试过了,它让我生气了。 – Jagd 2011-02-03 16:13:28

回答

1

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

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