Im tring для реализации шаблона репозитория и всех примеров, которые я нашел, очень просты (игнорируя объединения) или используя сущность framework.Объединение шаблона DAL с использованием dapper
таблицы Мои БД являются
tblUser {id, fname, lname, email, password, dateAdded}
tblAccount {id, name, isActive, dateAdded}
tblAccountUser {userId, accountId, isActive, dateAdded}
Пользователь может иметь несколько учетных записей и учетная запись может иметь несколько пользователей. У tblUserAccount есть логическое значение, указывающее, активен ли пользователь для учетной записи и когда пользователь был добавлен.
my pocos map непосредственно к таблицам с дополнительным свойством для отношений. есть ли лучший способ сделать эту часть? Я не мог придумать лучшего способа для моего репозитория возвращать отношения на что-то вроде 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 из моих РЕПО, как я должен вернуть отношения. как я показал в моих pocos выше или есть лучший способ?
- Должны ли мои таблицы отношений получить свои собственные pocos? Если да, то только тогда, когда у них есть дополнительные данные, такие как isActive и пользовательские/учетные настройки.
- В моих репозиториях я не уверен, какой репо должен обрабатывать конкретные запросы, когда дело касается отношений.
- Должен ли я иметь другое репо для учетных/пользовательских отношений?
критика, ссылки, помощь всем приветствуется Спасибо.
Редактировать:
Дополнительное примечание: Следует упомянуть. Причина, по которой я хочу собрать пользователей/учетных записей, состоит в том, что они будут в сетке, где мы можем активировать/деактивировать и изменить значения для пользователя или их учетной записи.
A1 и 3 должны были сказать раньше, но использовали его для сетки, чтобы все пользователи должны были получать все учетные записи. производительность будет медленной с вызовами 10k +. Отличная идея, которую я мог бы использовать где-то в другом месте. A 2. Где бы я мог найти tblAccountUser.IsActive, чтобы узнать, активен ли пользователь для определенной учетной записи. A4. Есть один для учетных записей, вы имеете в виду один для tblAccountUsers? – ozz
A 2 В AccountRepository. Вы можете либо фильтровать неактивные учетные записи, либо возвращать IsActive в качестве свойства объекта Account. A 4 Я имею в виду AccountRepository. Создайте такие методы, как GetAccountsByUserId – detale
Я пробовал делать то, что вы предлагали фильтровать неактивно/активно, и показывать их по отдельности, и это было своего рода беспорядок, потому что мы должны иметь возможность искать по user.email и account.name, в зависимости от чего больше Соответствующий. IsActive - свойство как для учетной записи, так и для отношения учетной записи пользователя, что делает ее уникальной. Мне было предложено в другом месте создать poco для связи из-за присутствия дополнительных столбцов, а не только (AccountID, UserID). До сих пор он работал лучше. – ozz