2010-12-27 5 views
1

私のORMにEFv4を使用していますが、ヌル入力不可とマークされた複数のカラムを持つテーブルにレコードを挿入しようとしました(空の文字列はnvarchar列)。問題は、EFがこの列のデフォルト値を取得せず、エンティティのインスタンスを作成していくつかの文字列プロパティを残したときnullこれをDBテーブルに保存しようとすると例外が発生します(制約設定をデータセット)。エンティティ・フレームワークがSQL Server DBのNULL以外のカラムに対して作成する

したがって空の文字列の既定値はSQL Server Management Studio内で機能しますが(列emtpyを残すと自動的にemtpy文字列が挿入されます)、EF内では機能しません。

uniqueidentifierプライマリキーの列を実際に気づいたことがありますが、列のデフォルトに関する情報がないため、列が何であってもEFモデルに入りません。

誰かがこれに気づいた?任意の回避策?

さらに、最新のEF機能CTPでこれを改善した点はありますか?

答えて

3

これはEFの問題としては表示されません。 L2Sも同じことをしています。 '問題'は、テーブルに行を挿入すると、EF/L2Sは実際にはInsertステートメントのNULL値を含む列を含むことです。このように挿入が行われると、デフォルト値は使用されません。

私たちがDALで行ったことをしなければならないかもしれません。それは、挿入を行う前にヌルをデフォルト値に置き換えることです。

+0

私は、これはええ、それかもしれないと思います。 DBにnullを許可することに戻すだけで意味がありますか?私はそれを見ているので、エンティティのすべての値を初期化しなければならないという苦労があります。いくつかのエンティティには数十の文字列フィールドがあります。 – mare

+0

@Mare - 私はいいえと言います。しかし、それは主に私たちのDBで可能な限りヌル可能な列を避けようとしているからです。エンティティの各プロパティを調べる効率的なルーチンを書くことができます。データ型がstringの場合は、nullをString.Emptyに置き換えます。私たちはこれをすると思います。 –

0

Management Studioでテーブルを作成するときに割り当てるデフォルト値は、「データベースからモデルを作成する」ときにEFモデルには作成されませんが、デフォルト値をSQLサーバーを作成し、次にEFモデルのデフォルト値を設定すると、オブジェクトを作成するときにオブジェクトに設定されているデフォルト値が返されます。

編集:直接このようなあなたはEDMXファイルを編集する必要があり、文字列の場合:

<Property Type="String" Name="Listing" MaxLength="Max" FixedLength="false" Unicode="false" DefaultValue="" /> 
関連する問題