#c# #repository-pattern
#c# #репозиторий-шаблон
Вопрос:
У меня есть 3 таблицы:
Player => PlayerId (Primary Key), Name, etc
Team => TeamId (Primary Key), Name, etc
PlayerTeam => PlayerId, TeamId (The combination must be unique)
тогда у меня есть следующее:
public interface IEntityKey<TKey>
{
TKey Id { get; }
}
public interface IRepository<TKey, TEntity> where TEntity : class, IEntityKey<TKey>
{
IQueryable<TEntity> All();
TEntity FindBy(Expression<Func<TEntity, bool>> expression);
....
TEntity FindBy(TKey id);
}
Теперь, хотя вышеприведенное будет отлично работать для таблиц с одним ключом, таких как таблица player или team, как бы мне реализовать его для моей таблицы playerteam? Мне нужно решение, которое будет обслуживать любое количество ключей. Я бы предпочел такое решение, как …
public interface IEntityKey<TKey> where TKey : System.Tuple
{
TKey Id { get; }
}
более
public interface IEntityKey<TKey1, TKey2>
{
TKey1 Id1 { get; }
TKey2 Id2 { get; }
}
Ответ №1:
Просто используйте свой оригинальный IEntityKey
интерфейс с Tuple
as TKey
:
public class PlayerTeam : IEntityKey<Tuple<int, int>>
{
Tuple<int, int> IEntityKey<Tuple<int, int>>.Id
{
get { return Tuple.Create(PlayerId, TeamId); }
}
public int PlayerId { get; set; }
public int TeamId { get; set; }
}
В качестве примечания, мне кажется, что PlayerTeam
это не сущность, а просто ассоциация…