私は最初にEF 4データベース+ POCOを使用しています。受信する DateTime が UTC の種類であることを EF に簡単に示す方法がないため、プロパティを自動生成ファイルから別のファイルの部分クラスに移動しました。
private DateTime _createdOn;
public virtual System.DateTime CreatedOn
{
get { return _createdOn; }
set
{
_createdOn =
(value.Kind == DateTimeKind.Unspecified)
? _createdOn = DateTime.SpecifyKind(value, DateTimeKind.Utc)
: value;
}
}
ただし、モデルを更新するたびに、自動化されたプロパティが T4 世代で再度作成されます。もちろん、これにより次のコンパイル エラーが発生します。「型 'Foo' には、'CreatedOn' の定義が既に含まれています。
そのプロパティを生成せず、自分で処理できるように EF に指示する方法はありますか?
アップデート
みんなの答えをありがとう...
別の名前で新しいカスタム プロパティを作成しました。
public virtual System.DateTime CreatedOnUtc
{
get
{
return (CreatedOn.Kind==DateTimeKind.Unspecified)
? DateTime.SpecifyKind(CreatedOn, DateTimeKind.Utc)
: CreatedOn;
}
set
{
CreatedOn =
(value.Kind == DateTimeKind.Unspecified)
? CreatedOn = DateTime.SpecifyKind(value, DateTimeKind.Utc)
: value;
}
}
また、Linq-to-Entities クエリで使用する必要のあるプロパティを除いて、自動生成されたプロパティのすべてのセッターとゲッターを Private に設定しました (ため息)。そのような場合、それらのゲッターを internal に設定します。
EFがそれを扱うべきDateTimeの「種類」を指定するDateTime型のドロップダウンがあればいいのにと思います。それは時間と余分な複雑さを節約したでしょう.