0

データベースから ( EFを使用して)モデルを生成し、コード生成戦略を[なし] に設定してから、モデルと同じプロパティを使用して (POCO) クラスを作成し、ビジネス クラスをEFから切り離しました。(私のモデルには、質問と回答の 2 つのクラスしかありません。1 つの質問に複数の回答を含めることができます)。

そして、このコードは良いです:

Question q=db.Questions.First();
Answer a=q.Answers.First();
a.Title+=" modified";
q.Answers.Add(new Answer(){Text="bla bla bla"});
db.SaveChanges();

少し不便です:

Question q=db.Questions.First();
Answer a=q.Answers.First();
q.Answers.Remove(a);
db.SaveChanges();

このコードでは、次のエラーが発生します。

1 つ以上の外部キー プロパティが null 非許容であるため、リレーションシップを変更できませんでした。リレーションシップに変更が加えられると、関連する外部キー プロパティが null 値に設定されます。外部キーが null 値をサポートしていない場合は、新しい関係を定義するか、外部キー プロパティに別の非 null 値を割り当てるか、関連のないオブジェクトを削除する必要があります。

しかし、これは次の方法で実行できます。

Question q=db.Questions.First();
Answer a=q.Answers.First();
db.Answers.DeleteObject(a);

EFが十分に優れているのに、なぜCastle Windsor(Dynamic Proxy)が必要なのですか?EFはCastle Windsorと同様に機能し、実行時にPOCOクラスを継承します。

1) EF がある場合、DynamicProxy (Castle Windsor) と AOP (PostSharp) にはどのような役割がありますか?

2) コンパイル時に POCO クラスを継承できる場合、ダイナミック プロキシ (リフレクションあり) は何が必要ですか? (これはオプションであり、この主題について別の質問を作成することができます)

私の悪い英語でごめんなさい。

4

0 に答える 0