Как мне реализовать решение для уникальных ключей? - PullRequest
0 голосов
/ 10 октября 2011

У меня есть 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);
}

Теперь, хотя вышеприведенное будет хорошо работать для столов с одиночным ключом , таких как стол игрока или команды, как бы я реализовал это для моего стола playerteam? Что мне нужно, так это решение, которое бы обслуживало любое количество ключей . Я бы предпочел решение, такое как ...

public interface IEntityKey<TKey> where TKey : System.Tuple
{
    TKey Id { get; }    
}

более

public interface IEntityKey<TKey1, TKey2>
{
    TKey1 Id1 { get; }    
    TKey2 Id2 { get; }    
}

1 Ответ

1 голос
/ 10 октября 2011

Просто используйте ваш оригинальный интерфейс IEntityKey, с Tuple в качестве 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 - это не сущность, а простоассоциация ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...