最近、VS2010 から VS2012 に移行したプロジェクトがあります。
私のエンティティを含むEF4.1 edmxファイルが含まれています。これらのエンティティのいくつかはビューに基づいており、読み取り専用です。ビューによって返される一部の列は null 可能ですが、ビュー内のこれらの列の戻り値を変更して、null を返さないようにしました。
ISNULL(NumericColumnName, 0) AS NumericValueColumn
VS2010 で「データベースからモデルを更新」機能を使用してモデルを更新すると、この方法で返された列がモデルで null 非許容として作成されていました。ただし、VS2012 への移行以降、これは当てはまりません。
現在、「データベースからモデルを更新」機能を使用するたびに、これらのプロパティは null 許容として生成されます。私がしなければならないことは、手動で列をnull不可に設定することです。ただし、次回「データベースからモデルを更新」を実行すると、エンティティ プロパティは null 許容として再生成されます。次に、それらを再度 null 非許容に更新する必要があります。
私が試した別の回避策は、ビューベースのエンティティを独自の edmx ファイルに移動することです。ただし、どちらの edmx ファイルを更新しても同じ動作が見られます。
もう 1 つの詳細は、EF4.1 T4 STE テンプレートを介して生成された自己追跡エンティティを使用していることです。
VS2012 の EF デザイナーが、ビューベースのエンティティの null 非許容属性を上書きしないようにする方法はありますか?
編集
VS2012 のデザイナーは、あなたが自分の足を撃たないようにしようとしていることがわかりました。その結果、私のエンティティ内のメンバー プロパティが変更されました。
以下からメンバーを生成する場合:
SELECT ISNULL(Quantity,0) * ISNULL(Number, 0) AS Total FROM SomeTable
VS2012 は、乗算の結果が 0 になる方法がないことを理解していないため、SomeTable エンティティのメンバー Total を常に null 許容に設定します。この動作を防ぐには、次のように変更します。
SELECT ISNULL(Quantity * Number, 0) AS Total FROM SomeTable.
ISNULL(SUM(SomeCol),0)
は と同じではないため、集約に注意してSUM(ISNULL(SomeCol,0))
ください。