Я работаю с EF 4 и шаблоном репозитория. В моих приключениях, когда я пытался выполнить модульное тестирование моего контекста данных EF, я наткнулся на шаблон генератора контекста ADO.Net, который, как следует из названия, помогает насмехаться над контекстом данных.
Хотя мой контекст работает нормально, у меня проблемы с хранилищем, и это немного загадка. Вот мой интерфейс хранилища (сокращенно):
public interface IRepository<T> where T : class
{
/// <summary>
/// Finds all entities
/// </summary>
/// <returns></returns>
IQueryable<T> Find();
/// <summary>
/// Find alls entities and loads included relational properties.
/// </summary>
/// <param name="includes">Relational properties to load.</param>
/// <returns></returns>
IQueryable<T> Find(params Expression<Func<T, object>>[] includes);
/// <summary>
/// Adds an entity to the repository.
/// </summary>
/// <param name="entity">Entity to add.</param>
void Add(T entity);
/// <summary>
/// Updates an entity in the repository.
/// </summary>
/// <param name="entity">Entity to update.</param>
void Update(T entity)...etc
С помощью фиктивного контекста вы получаете новый набор сгенерированных сущностей с виртуальными свойствами. Я дал этим сущностям то же пространство имен, что и мои настоящие сущности, с целью насмешки над ними, и они идентичны типам моих настоящих, только со ссылкой на ложные сущности.
Проблема в том, что когда у меня есть реализация моего интерфейса репозитория, я получаю интерфейс, в котором не реализованы исключения, даже если я на самом деле реализую этот интерфейс. Это происходит только тогда, когда я пытаюсь построить проект. Intellisense считает, что все в порядке (т. Е. Стрелка под интерфейсом не указывает, что мне нужно это реализовать).
Ниже приведена реализация интерфейса через мой интерфейс ICategoryLocalized (он наследуется от IRepository).
public class CategoryLocalizedRepository : MockDatabaseRepository, ICategoryLocalizedRepository
{
#region Constructor
public CategoryLocalizedRepository(MockContext context)
: base(context)
{
}
#endregion
#region Data Methods
public IQueryable<CategoryLocalized> Find()
{
return Context.CategoryLocalized;
}
public IQueryable<CategoryLocalized> Find(params Expression<Func<CategoryLocalized, object>>[] includes)
{
return CreateObjectQuery<CategoryLocalized>(Context.CategoryLocalized, includes);
}
public CategoryLocalized Get(int id)
{
return Context.CategoryLocalized.SingleOrDefault(d => d.CategoryLocalizedID == id);
}
public CategoryLocalized Get(int id, params Expression<Func<CategoryLocalized, object>>[] includes)
{
IObjectSet<CategoryLocalized> query = CreateObjectQuery<CategoryLocalized>(Context.CategoryLocalized, includes);
return query.SingleOrDefault(d => d.CategoryLocalizedID == id);
}
public void Add(CategoryLocalized categoryLocal)
{
AddEntity<CategoryLocalized>(Context.CategoryLocalized, categoryLocal);
}
public void Update(CategoryLocalized categoryLocal)
{
UpdateEntity<CategoryLocalized>(Context.CategoryLocalized, categoryLocal);
}...etc
Я не знаю, почему компилятор говорит, что интерфейс (IRepository) не реализован в CategoryLocalizedRepository, когда он явно есть.