リポジトリパターンと私が見つけたすべての例を実装するには、非常に単純です(結合を無視する)か、エンティティフレームワークを使用します。ユーザーが複数のアカウントを持つことができ、アカウントは複数のユーザーを持つことができますDALリポジトリパターン結合の使用dapper
tblUser {id, fname, lname, email, password, dateAdded}
tblAccount {id, name, isActive, dateAdded}
tblAccountUser {userId, accountId, isActive, dateAdded}
を次のように
私のDBテーブルがあります。 tblUserAccountには、ユーザーがそのアカウントに対してアクティブであるかどうか、およびユーザーが追加されたかどうかを示すブール値があります。
my pocosはリレーションの追加プロパティを持つテーブルに直接マップします。この部分を行うより良い方法はありますか?私はリポジトリがGetUsersWithAccounts(userId)のような関係でリターンを返す良い方法を考えることができませんでした。
tblUser {
guid id,
string fname,
string lname,
string email,
string password,
date dateAdded,
IList<tblAccount> accounts
}
tblAccount {
guid id,
string name,
bool isActive,
date dateAdded,
IList<tblUser> users
}
//should i have a tblAccountUser poco with something like
//{tblUser user, tblAccount account, bool isActive, date dateAdded}
私は、次のリポジトリを持っている:
UserRepository {
Add()...
...
tblUser GetById(guid userId) {}
IEnumberable<tblUser> GetAll() {}
//was unsure if Account repo should retrieve a user's accounts or if the user repo should.
//using uow.User.GetAccounts(user.id) seems natural but please feel free to let me know what you think
IEnumberable<tblAccount> GetAccounts(guid userId){}
//this is the one i was really unsure about
//this would return tblUser obj with its tblUser.Accounts filled.
IEnumberable<tblUser> GetAllWithAccounts()
}
AccountRepository{
Add()
...
AddUser(guid userId) //only adds relation to tblAccountUser Makes sense?
}
//Should i have a repository for the Account <-> User relations?
質問はあらゆる場所にあり、合計する:
- 私のレポからPOCOSを返すどのように私は関係を返す必要があります。上記の私のポコスに示されているか、より良い方法がありますか?
- 私のリレーションテーブルには独自のポコが必要ですか?その場合は、isActiveやユーザー/アカウント固有の設定などの追加データがある場合のみです。
- 私のリポジトリでは、関係についてはどのレポが特定の要求に対処するのか不明です。
- アカウントとユーザーの関係について別のレポが必要ですか?
批判、リンク、おかげさまで大歓迎です。
編集:
その他の注意:記載しておく必要があります。ユーザー/アカウントを取得する理由は、ユーザーまたはアカウントの値を有効化/無効化および変更できるグリッド内にあるためです。
A1&3は前に述べたはずだが、すべてのユーザーがすべてのアカウントを取得する必要があるようにグリッドに使用していたはずです。パフォーマンスは10k +呼び出しでは遅くなります。私はどこか別の場所で使うかもしれない素晴らしいアイデアです。 2. tblAccountUser.IsActiveを見つけて、特定のアカウントに対してユーザーがアクティブかどうかを確認できます。 A4。あなたはtblAccountUsersのために1つを意味しますか? – ozz
A 2 AccountRepositoryにあります。非アクティブなアカウントをフィルタリングするか、IsActiveをAccountオブジェクトのプロパティとして返すことができます。 4 AccountRepositoryを意味します。 GetAccountsByUserIdのようなメソッドを作成する – detale
私があなたが提案したものを非アクティブ/アクティブでフィルタリングして個々に表示しようとしましたが、もっと多くのものに応じてuser.emailとaccount.nameで検索する必要があるため混乱しました関連性があります。 IsActiveは、アカウントとユーザーアカウントの両方のためのプロパティで、ユニークなものです。私は、(AccountID、UserID)だけでなく、追加の列が存在するため、関係のポコを作成することを他の場所で提案しました。これまでこれまでよりうまくいっています。 – ozz