私はチュートリアル (特に Linq-To-Entities を使用するもの) を実行してきましたが、基本的な概念は理解していますが、いくつかの問題が発生しています。
通常、チュートリアルには、基本的な create、update、delete ステートメントのみを使用する単純なモデルとフォームのみが含まれます。私のものはもう少し複雑で、6 つのデータベース オブジェクトのリレーションシップを処理するときが来ると、チュートリアルは役に立たなくなるため、これを正しい方法で行っているかどうかはわかりません。
post メソッドの場合、CRUD 操作を実行する通常の方法
entities.AddToTableSet(myClass);
entities.SaveChanges();
完全に実装されたクラスがコントローラーメソッドに投稿されないため、私が望むことはできません。個々のフィールド、フォーム コレクション、または複数の DTO オブジェクトをポストしてから、サービスまたはリポジトリでメソッドを呼び出して、フォーム ポストから受け取った情報と、クエリまたは作成に必要な情報を取得してから、これらすべてを実行して、保存できるデータベース オブジェクトを作成します。
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Add(int id, [Bind(Exclude = "Id")] ClassA classA,
[Bind(Exclude = "Id")]ClassB classB)
{
// Validation occurs here
if(!ModelState.IsValid)
return View();
try
{
_someRepositoryOrService.Add(id, classA, classB);
return RedirectToAction("Index", new { id = id });
}
catch(Exception ex)
{
// Logging and exception handling occurs here
}
}
public void Add(int id, ClassA classA, ClassB classB)
{
EntityA eA = new EntityA
{
// Set a bunch of properties using the two classes and
// whatever queries are needed
};
EntityB eB = new EntityB
{
// Set a bunch of properties using the two classes and
// whatever queries are needed
};
_entity.AddToEntityASet(eA);
_entity.AddToEntityBSet(eB);
_entity.SaveChanges();
}
これを正しく処理していますか、それともフレームワークをろくでなしにしていますか? 実際にエンティティ オブジェクトを直接使用することはありません。クエリを実行するたびに、必要な情報を DTO に入れ、それを基にビューを作成します。創作も同様です。これは許可されていますか、それともエンティティを直接使用しないことは、フレームワークを使用する目的に反していますか?
編集:このエラーメッセージのためにLINQクエリを適切に実行するには空のコンストラクターが必要になるため、このアプローチについても心配しています:
LINQ to Entities では、パラメーターなしのコンストラクターと初期化子のみがサポートされています。
コンストラクターにロジックを必要とすることはめったにないので、これは大したことではありませんが、コンストラクターがなく、パブリック プロパティのみを使用することは問題ですか?