2011-02-02 11 views
2

私の質問は、SQL Server 2008と.NET 3.5 Entity Frameworkの間の数値型のマッピングを具体的に扱っています。SQL Server 2008とLINQの間の型マッピング

私はデータベースの設計に関してかなり厳しい規則を持つ法人のために働いています。このルールは、必要以上に大きなサイズではないテーブルについては神経症であるDBAによって強制されます。たとえば、適切な場合には、数値列をtinyintとsmallintに保ちます。

EFは(右に左、.NET型にSQL Serverの種類)などのような数値型にマップ:
tinyint型 - >バイト
SMALLINT - >Int16型
int型を - >int
bigint - >int64

私は最近読んだことがあり、.NETランタイムがInt32で動作するように最適化されていることがわかりました。 This Stackoverflowの質問は本当に誰かがそれを読むことをしたいと思う、それの勇気に入る。

EFがsmallintをInt16にマップするので、最適化の問題を乗り越えてInt32メンバ変数をコード内で使用するか、Int32での作業を可能にする他の解決方法がありますかコードを入力しても、SQL Serverでsmallint型を使用できるようになりますか?私は1つまたは2つのソリューションを私自身で考えることができますが、それらはすべて「最適化」という名前で過度のように思えます。

+1

私はこれについてはわかりませんが、あなたのモデルのプロパティの型をin32に変更するだけで、int16の最大値より大きい値を送信しない限り、すべてがうまくいくはずです。 – ryudice

+0

@ryudice - 残念ながら、それは動作しません...または少なくともLINQ to Entities(LINQ to SQLで動作するかもしれませんか?)。私はそれを試して、それは私に怒った。 – Jagd

答えて

1

LINQ to EntitiesではなくLINQ to SQLの場合は、マッピングの型を変更できますが、唯一の問題はsmallintの列が処理できる値よりも大きい値になった場合ですそれはとにかく全体的な問題だと思います)。

しかし、LINQ to Entitiesバリデータでは、「不一致」が許可されていません。

+0

ORM(EDMX)に入り、手動でInt16のタイプをInt32に変更して再コンパイルすると、基本的に関係タイプが正しくマップされていないというエラーが表示されます。 – Jagd

+0

ああ、それはLINQ to SQLだけで可能です。ごめんなさい – bdukes

関連する問題