データベースから ( 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 クラスを継承できる場合、ダイナミック プロキシ (リフレクションあり) は何が必要ですか? (これはオプションであり、この主題について別の質問を作成することができます)
私の悪い英語でごめんなさい。