Linq-To-Sql-少しの経験、または「長時間のセッションに関するいくつかの言葉」

Linq-To-Sqlをまだ使用していないが、将来のプロジェクトで使用するアイデアを持っている人にLinq-To-Sqlについて少しお話ししたいと思います(また、それを他にどのように使用できるかについてのコメントも聞くかもしれません)。 つまり、DLinqを簡単に使用するためにアプリケーションアーキテクチャを開発する必要があることについてのいくつかの言葉です。

Linq-To-Sqlに出会う前は、NHibernate ORMシステムの経験が少なかったため、完全なORMがどのように見えるかを想像する必要があります。 Linq-To-Sqlは完全なORMではなく、オブジェクトのテーブルエントリの単なる表現であるとすぐに言わなければなりません。 必要に応じてオブジェクトを作成することはできません(本質的にmapinデータベースオブジェクトとは異なります)が、リレーショナル構造から(いくつかの予約を使用して)続行する必要があります。

だから、だれもがDLinqを操作する方法を知っていると思います。 エンティティを使用してModelDataContextモデルを作成した場合、オブジェクトをロードする例を次に示します

using (ModelDataContext dataContext = new ModelDataContext())

{

Entity
obj = ( from e in dataContext.Entities

where e.EntityID = 10

select e).FirstOrDefault();

}




* This source code was highlighted with Source Code Highlighter .




次に、objオブジェクトを操作し、ある時点で変更されたデータを保存する必要があります。 どうやってやるの? 本格的なORMシステムでは、DetachメソッドとAttachメソッドを使用できます。それらの意味は簡単です。最初のDataContextからオブジェクトを切り離し、別のDataContextにひねります。 DLinqにはAttachメソッドがありますが、Detachはありません。そのため、ModelDataContextにオブジェクトを再度ロードし、変更をプッシュする必要があります(つまり、各プロパティについて)。 別のオプションがあるかもしれません:オブジェクトを複製する場合、以前のModelDataContextに依存しませんが、このオブジェクトが他のオブジェクトへのリンクを持っている場合は、それらを使って何かをする必要があります。

別の方法で行うことができます。 長いセッションでの作業-たとえば、オブジェクトの読み込み、表示、保存などのタスクでModelDataContextを開き、ModelDataContextでDisposeを呼び出します。 このメソッドにより、オブジェクトをリロードする必要がなくなります。 しかし、他の困難が発生します-ModelDataContextの寿命が伸びる場合、ModelDataContextを開いたままにしてオブジェクトのリストをロードし、オブジェクトの1つを選択し、オブジェクトの1つを編集し、追加、削除し、データベースにエラーがある場合(たとえば、参照されているため削除することは不可能です)、ModelDataContextで(InsertOnSubmit(エンティティ)を)追加しようとしたオブジェクトを削除(DeleteOnSubmit(エンティティ)を呼び出し)し、更新しようとしたオブジェクトも追加する必要があります、そしてオブジェクトを更新 アップグレードしたい人。 一般的に、DLinqで標準のRollbackメソッドを使用しなかった理由は奇妙です。すべてが透明であるように見えます。

プロジェクトでDLinqを使用する方法の選択は、ユーザーとプロジェクトによって異なります。 Linq-To-Sqlを操作する他の方法があれば、喜んで耳を傾けてメモを取ります。






All Articles