2

私はここでちょっとした難問に直面しています.Guruの何人かが空白を埋めるのを手伝ってくれることを願っています.

私が現在直面している状況は、「ユーザー」テーブルと「OpenID」テーブルに関するものです。私のアプリでは、ユーザーが複数の OpenID を持つことができるため、別のテーブルでそれらを追跡しています。

ユーザー
ID
ユーザー名

OpenID
ID
UserID
Claimedidentifier

テーブルごとに CRUD リポジトリがあり、リポジトリと連携するサービスもあります (リポジトリごとに 1 つのサービス)。

私が持っている質問は、新しいユーザーの挿入に関するものです (更新は同じプリンシパルに従うため)。これが私の頭の中にあるオプションです。

  1. UserService に新しいユーザーを挿入させ、ユーザーの ID を取得してから、UserID を使用して新しい OpenID を挿入します。
  2. UserService に新しいユーザーを ClaimedIdentifier と共に UserRepository に送信させ、リポジトリに User と OpenID の両方を挿入させます (これは CRUD 方法論にはあまり適していません)。
  3. User テーブルと OpenID テーブルの両方のビューを作成し、UsersOpenIDRepository と UsersOpenIDService を作成して、ビューに挿入します。

私が考えることができる以上の他の考えや提案は大歓迎です.

私はNHibernateを使用していないことに注意してください。これにより、ドメインをモデル化できますが、適切だと思います。このプロジェクトではLinq to SQLにこだわっていますが、

4

1 に答える 1

0

私の経験では、Linq2SQLはとにかくCRUD手法にうまく適合していません。フィットさせるということは、あまりにも多くのフープを飛び越えて、それだけの価値がないことを意味します。あなたが説明している問題は、1つだけではありません。エンティティを更新すると、さらに悪化します。

そのため、現在のプロジェクトではソリューション2(両方のエンティティをusersrepostoryに挿入)を選択しました。

また、リポジトリの更新方法もあきらめました。代わりに、私のリポジトリには、ロードされたエンティティに対してすべての更新が実行された後に呼び出す必要があるSubmitChangesメソッドがあります。同じWebリクエストで作成されたすべてのリポジトリは同じDataContextを共有するため、Submitchangesを呼び出すリポジトリは実際には重要ではありません。これはCRUDではありませんが、データベースの更新を実行するLINQ2SQLの方法に非常に適しています。

本当に純粋なCRUDが必要な場合は、POCOエンティティ生成テンプレートを使用してEFを確認することをお勧めします。

于 2010-06-23T22:07:09.347 に答える