Sto tentando di implementare un metodo generico GetById(T id)
che soddisferà i tipi che potrebbero avere tipi di ID diversi. Nel mio esempio, ho un'entità che ha un ID di tipo int
e uno di tipo string
.Come implementare GetById generico() dove Id può essere di vari tipi
Tuttavia, io continuo a ricevere un errore e non ho idea del perché:
Il tipo 'int' deve essere un tipo di riferimento al fine di utilizzarlo come parametro 'TID' nel tipo generico di metodo IEntity
Entity Interfaccia:
per soddisfare i miei modelli di dominio che possono avere Id del tipo di int
o string
.
public interface IEntity<TId> where TId : class
{
TId Id { get; set; }
}
Entità Implementazioni:
public class EntityOne : IEntity<int>
{
public int Id { get; set; }
// Other model properties...
}
public class EntityTwo : IEntity<string>
{
public string Id { get; set; }
// Other model properties...
}
Repository Generico Interfaccia:
public interface IRepository<TEntity, TId> where TEntity : class, IEntity<TId>
{
TEntity GetById(TId id);
}
Generico Attuazione Repository:
public abstract class Repository<TEntity, TId> : IRepository<TEntity, TId>
where TEntity : class, IEntity<TId>
where TId : class
{
// Context setup...
public virtual TEntity GetById(TId id)
{
return context.Set<TEntity>().SingleOrDefault(x => x.Id == id);
}
}
Implementazioni repository:
public class EntityOneRepository : Repository<EntityOne, int>
{
// Initialise...
}
public class EntityTwoRepository : Repository<EntityTwo, string>
{
// Initialise...
}
Perché stai limitando 'TId' a' class' tipi? Questo non funzionerà con 'int' (il messaggio di errore lo rende abbastanza chiaro). 'class' indica" tipo di riferimento "in termini generici. –