Я определил интерфейс:
public interface IIdEntity
{
long Id { get; set; }
}
И изменил шаблон t4, который генерирует мои классы POCO, так что каждый класс должен реализовывать открытый интерфейс IIdEntity interface.
Как это:
using System.Diagnostics.CodeAnalysis;
public partial class User : IIdEntity
{
public virtual long Id
{
get;
set;
}
С помощью этой модификации я могу написать общий GetById (длинный идентификатор), например:
public T GetById(long id)
{
return Single(e => e.Id == id);
}
IRepository определяется следующим образом:
/// <summary>
/// Abstract Base class which implements IDataRepository interface.
/// </summary>
/// <typeparam name="T">A POCO entity</typeparam>
public abstract class DataRepository<T> : IDataRepository<T>
where T : class, IIdEntity
{