更新:これはできないことを知っていることに注意してください...これは私が本当にうまくいくことを望んでいたことです。責任を分離する他の方法があるかもしれませんね。だから私が探しているのは...
Entity Framework は、複数の責任をクラスに強制します (通常のロジック、基本的な注釈、および CRUD インターフェイス機能)。通常はすべて 1 つのクラスにあるものを取りたいだけです...そして、Entity Framework と通常のロジックを介してクラスの永続的な機能を分離します。
私の思考プロセス: 最近、私は Entity Framework に取り掛かっていますが、いくつかのエンティティ クラスがやややりすぎているという考えは好きではありません。ロジック、データ アクセスとのインターフェイス、および Entity Framework 注釈。これを修正するために、Entity クラス ファイルを部分的に作成し、クラスの他の側面から離れた場所にデータ アクセス機能を実装したいと考えました。これはうまく機能し、非常にきれいです!
そうしているうちに、プロパティを部分的にして、EF プロパティ アノテーションから離れた場所に実装することが非常に有益であると考えました!! これにより、ファイルがクリアされ、単一の責任が許可されます。ただし、これは許可されていません。残念。
部分プロパティは、部分メソッドと同様に実装されます。1 つの部分プロパティの定義と、もう 1 つの部分プロパティの実装...上部のリンクの写真 (またはコメント) とその下のコードのように。
public partial class Agency : PropertyValidator, IAgency
{
private string _name;
public partial string Name
{
get { return _name; }
set
{
// PropertyValidator stuff
if (string.IsNullOrEmpty(value))
AddErrorToProperty("Agency name must contain a reasonable alphanumeric value.");
if (string.IsNullOrWhiteSpace(value))
AddErrorToProperty("Agency name cannot contain all spaces.");
SetPropertyIfValid(ref _name, value);
}
}
}
次に、すべての抽象データベース項目を処理する他の部分クラスがあります...
public partial class Agency : IPersitentEntity, IAgency
{
[Key] // NOTE these Annotations are because of Entity Framework...nice separation!
public int ID { get; set; } // From IPersitentEntity
[Required]
[MinLength(3), MaxLength(50)]
public partial string Name { get; set; } // IAgency NOTE this is not valid, but the
// separation is amazing!
// From IPersitentEntity provide CRUD support
public void Create() { throw new NotImplementedException(); }
public void Retrieve(int id) { throw new NotImplementedException(); }
public void Update(int id) { throw new NotImplementedException(); }
public void Delete(int id) { throw new NotImplementedException(); }
}
現在、注釈とロジックを組み合わせる必要があります。EF 注釈を除いて、抽象データベース項目を既に分離しているので、ちょっと奇妙です!