2017-05-08 4 views
1

新しい列がいくつか追加されたテーブルがあり、既存のデータを正確に反映できるようにNULLが設定されています。これらのレコードが作成された時点では、新しい列は存在しないため、nullはその時点のデータベースの状態を正確に表します。すべての新しいデータについて、私はnullを許可したくありません。それを管理するベストプラクティスは何ですか?Entity Frameworkで新しいデータ整合性ルールを適用する方法

EntityTypeConfigurationクラスで.IsRequired()を使用すると、その列をnullにできないように変更しようとします。また、nullが発生した場合は失敗します。私はまだそれらの古いレコードを読むことができるようにしたい、私はちょうど新しい列がなくても新しいレコードを書きたくない。

可能な限りDBの近くでこれを実行したいので、私はセッターにいくつかの検証コードを入れました。

private string _CountryCode; 
    public string CountryCode 
    { 
     get 
     { 
      return _CountryCode; 
     } 
     set 
     { 
      if (string.IsNullOrEmpty(value)) 
       throw new ArgumentException("Country Code Required"); 
      _CountryCode = value; 
     } 
    } 

これは機能しますが、そこにはクリーナーソリューションがあります。

答えて

0

適切な方法はIsRequired()を使用します。これは、EFの場合は必須か、そうでないためです。それがどういうわけかそこに存在しないことが受け入れられるならば、それはまさにそれです:必須ではありません。

私のためにそれを処理する方法は以前のデータを移行することですが、そうしないと解決策が良いアプローチに見えますが、あなたの現在のセッターは本当に変です。たとえば、クラスをインスタンス化してmyObject.CountryCode = "AA";を実行した場合、の現在のの値がnullまたは空のため、例外が発生します。音が間違っている。代わりにvalueをテストする必要がありますか?

EFを使用して見た企業システムのほとんどは、EFが自動的にデータベースを変更するのを防ぎます。 DbContextDatabase.SetInitializer<YourContextClass>(null);を使用して、実稼働環境で自動的に実行されないようにすることは一般的です(しかし一般的ではありません)。特定の状況下では、データベース構造を強制的に更新するメソッドを呼び出すことも、データベースプロジェクトによって生成されたdacpacを使用することもできます。

+0

IsNullOrEmpty(value)である必要があります。 –

関連する問題