Я создаю интерфейс, следуя шаблону «Единица работы». Мой интерфейс выглядит так:Единица работы и EF
public interface IDataContext : IDisposable
{
void SaveChanges();
TSource Create<TSource>(TSource toCreate) where TSource : class;
TSource Update<TSource>(TSource toUpdate) where TSource : class;
bool Delete<TSource>(TSource toDelete) where TSource : class;
IQueryable<TSource> Query<TSource>();
}
Пока все хорошо. Теперь я реализую его в своем слое данных, который использует EF4 в качестве поставщика данных. Я придумал этот код для метода «Query», но я думаю, что это не очень чисто, я считаю, что есть умный способ сделать это, но я не могу понять.
public IQueryable<TSource> Query<TSource>()
{
var type = typeof(TSource);
IQueryable item = null;
if (type == typeof(Activity)) item = _entities.ActivitySet;
if (type == typeof(Company)) item = _entities.CompanySet;
if (type == typeof(Phase)) item = _entities.PhasesSet;
if (type == typeof(Project)) item = _entities.ProjectSet;
if (type == typeof(ProjectState)) item = _entities.ProjectStateSet;
if (type == typeof(ProjectType)) item = _entities.ProjectTypeSet;
if (type == typeof(User)) item = _entities.UserSet;
if (type == typeof(UserType)) item = _entities.UserTypeSet;
if (item != null) return item as IQueryable<TSource>;
throw new NotImplementedException(string.Format("Query not implemented for type {0}", type.FullName));
}
Проблемы я вижу здесь все МСФ пройти тестирование каждый раз, Althought я мог цепную их в каскадном если-то еще, но по-прежнему выглядит довольно ужасно для меня. Другие проблемы состоят в том, что я должен вручную добавить одну строку для каждой новой сущности, которая может быть добавлена, но это не моя основная проблема.
У кого-нибудь есть хороший совет по этому вопросу? Благодарю.
Что такое '_entities'? Возможно, вы сможете изменить его на что-то вроде '_entities.GetEntity()', но это зависит от того, что это такое. –
SwDevMan81
_entities - это автогенерируемый класс Entity Framework. –