EF部分クラスとデフォルト値
-
29-09-2019 - |
質問
から続く だからここでのDicsussion, 、コンストラクター内の作成および変更されたデータベースフィールドのデフォルトのデータタイム値を作成するために、部分クラスを実装しました。
問題は、私のデータベースに100以上のテーブルがあり、そのうち75歳以上が作成された列定義と変更された列定義を含む同じ基本構造を持っていることです。
そのため、私が維持する必要がある75以上の部分クラスを作成する代わりに、すべてのEFタイプが継承する基本クラスを作成する方法はあります。
編集:注目に値するのは、EF 4.0を使用していることです
解決
EF4とEF4ではずっと簡単ですが、EF4とEF1の両方で独自のベースクラスを指定できます。設計面を右クリックすると、コード生成アイテムを追加するオプションが表示されます。 ADO.NETエンティティオブジェクトジェネレーターを選択します。これにより、モデルからエンティティクラスを生成するために使用するテンプレートを指定するプロジェクト(.TT拡張子)へのT4ファイルが表示されます。別のベースクラスを指定するには、その中を見てください
Private Function BaseTypeName(ByVal entity As EntityType, ByVal code As CodeGenerationTools) As String
Return If(entity.BaseType Is Nothing, "EntityObject", MultiSchemaEscape(DirectCast(entity.BaseType, StructuralType), code))
End Function
EntityObjectを基本クラスに置き換えます。このテンプレートを使用している場合、ベースクラスはsystem.data.objects.dataclasses.entityobjectから継承する必要があることに注意してください。代わりにPocoテンプレートを使用できますが、これはおそらく十分です。
他のヒント
確かにEFにエンティティに基本クラスを使用するように指示することができます(デザイナーではエンティティのプロパティとして正しいです)...しかし、このフィールドのデフォルト値を確認したい場合は、おそらくあなたはObjectContext SavingChangesとObjectMaterializedの2つのイベント。
http://msdn.microsoft.com/en-us/library/system.data.objects.objectcontext.savingchanges.aspx
http://msdn.microsoft.com/en-us/library/system.data.objects.objectcontext.objectmaterialized.aspx
これらの機会を使用して、使用するデフォルト値を注入できます。たとえば、SavingChanges Handlerでは、ContextのObjectStateManagerを確認して、関連するエンティティの状態がentityState.Addedであるかどうかを確認し、作成された日付と変更された日付を必要に応じて設定できます。
または、提案されているように、SQL Serverの列のデフォルト値がGetDate()だけではない理由はありますか? (SQL Serverを使用していると仮定)....