Я знаю, что это старый поток, но в случае, если кто-то еще сталкивался с ним, у меня есть немного лучший обходной путь для использования EF.
В основном у меня есть два интерфейса
public interface IProduct
{
int Id { get; set; }
String Description { get; set; }
String Number { get; set; }
String Name { get; set; }
}
и
public interface IEFProduct
{
ICollection<IProcess> Processes { get; set; }
ICollection<ILine> Lines { get; set; }
}
Я сохраняю интерфейс IProduct
в моем проекте контрактов, поэтому он все еще полностью независим от остальной части моей модели, но я включил интерфейс IEFProduct
в свой проект Model, поскольку он содержит конкретныйреализация.Это означает, что я не могу получить доступ к процессам и строкам из чего-либо, что реализует интерфейс, а не из конкретного типа, но в моем случае это помогло мне решить проблему.
Другой путь вперед - использование DTO.
Все ваши модели будут использовать интерфейс, но ваша фактическая реализация EF будет использовать Конкретные DTO, в слое данных вы будете отображать их между собой либо вручную, либо с использованием Automapper - конечно, это может оказать небольшое влияние на производительность.