2011-01-14 4 views
0

私のプロジェクトでは、SqlCE 3.5、Linq2Sqlを使用し、SqlMetalでエンティティクラス(dbmlファイル)を生成します。Linq-to-Sql、エンティティクラスと親子オブジェクトの使用

エンティティクラスの拡張をビジネスオブジェクトクラスとして使用する場合、どのように子オブジェクトを処理する必要がありますか?

すでにdbmlファイルにある既存のEntitySet(Of ChildClass)を使用できますか?私は(ChildClassの)のE​​ntitySetは、完全なデータベーステーブルへの直接接続のいくつかの種類を持っていることを、このあいまいな仮定を得た

public partial class ParentClass 
{ 
public List<ChildClass> children { get; set; } 
} 

:または私は次のように、私の部分クラスの拡張で新しいコレクションのプロパティを作成する必要があります。そして、おそらくこれを純粋にデータアクセスオブジェクトとして使用する必要があります。ビジネスロジックでは、テーブルのサブセットのみを保持できるこの他のコレクションオブジェクトを保持する必要があります。

しかし、私が完全に誤解しているかどうかはわかりません。私は本当にこれがどのように正しく使われるべきか知りたいですか?


EDIT1:DataGridViewのに私のオブジェクトのコレクションをバインドするとき、おそらく私のためにパフォーマンスの問題である

一つのことがあります。いくつかのプロパティは、株式交換データフィードから頻繁に更新されます。ビジネスレイヤコレクションとしてEntitySetsを使用すると、これが遅くなるのではないかと思います。私がのサブチェンジを呼び出すことはありませんが、そのアップデートではです。それでも、私はすべての更新のために、datagridviewをスクロールすることができません。これは、EntitySetを使用すること、または頻繁に更新するDataGridView自体が、スクロールが不可能に見えることが原因ですか?

答えて

0

Designerによって生成されたエンティティ(実際のPOCOオブジェクトではない)を使用している場合は、ObjectSetを使用して子のcolletionを取得することもできます。それらはIQueryable型ですので、ToList()または.Where()LinQ拡張を使用すると、EFはデータベースを呼び出しません。 とにかく、ベストプラクティスは、IListを使用してそれらを公開し、リポジトリを使用してリストを埋めることです。 ObjectSetはListだけでなく、エンティティの一種のリポジトリです。

+0

ありがとうございます!私はあなたの意味を正確に理解してほしい。 「IListを使用してそれらを公開し、リストを埋めるためにリポジトリを使用する」とは、この例の最初のコード部分のようなものを意味します(http://mikehadlow.blogspot.com/2008/03/using-irepository-pattern-with)。 -linq-to.html)、IQueryableの例ではなくIListを返します。 – bretddog

+0

上記のEDIT1にこのコメントを変更しました.. – bretddog

+0

あなたがLinqフィルターをリストに適用するたびにIQueryableを返すと、Where、Distinctなどのように... EFとデータベース – Raffaeu

関連する問題