如何实现唯一键的解决方案

本文关键字:唯一 一键 解决方案 实现 何实现 | 更新日期: 2023-09-27 18:10:44

我有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; }    
}

如何实现唯一键的解决方案

只使用原来的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不是一个实体,而仅仅是一个协会…