Tôi đang cố triển khai phương thức chung GetById(T id)
sẽ phục vụ cho các loại có thể có các loại ID khác nhau. Trong ví dụ của tôi, tôi có một pháp nhân có ID loại int
và một loại string
.Cách thực hiện chung GetById() trong đó Id có thể có nhiều loại khác nhau
Tuy nhiên, tôi cứ bị lỗi và tôi không có ý tưởng tại sao:
Các loại 'int' phải là một loại tài liệu tham khảo để sử dụng nó như là tham số 'TID' trong các loại hình chung của phương pháp IEntity
Entity Interface:
để phục vụ cho các mô hình tên miền của tôi có thể có của Id loại int
hay string
.
public interface IEntity<TId> where TId : class
{
TId Id { get; set; }
}
Entity Triển khai:
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...
}
Generic Repository Interface:
public interface IRepository<TEntity, TId> where TEntity : class, IEntity<TId>
{
TEntity GetById(TId id);
}
Generic Thực hiện 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);
}
}
Triển khai Repository:
public class EntityOneRepository : Repository<EntityOne, int>
{
// Initialise...
}
public class EntityTwoRepository : Repository<EntityTwo, string>
{
// Initialise...
}
Tại sao các bạn hạn chế 'TId' cho 'loại class'? Điều đó sẽ không làm việc với 'int' (thông báo lỗi làm cho điều đó khá rõ ràng). 'class' có nghĩa là" kiểu tham chiếu "trong các ràng buộc chung. –