Проблема интерфейса генератора контекста ADO.Net - PullRequest
0 голосов
/ 18 февраля 2011

Я работаю с 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, когда он явно есть.

1 Ответ

0 голосов
/ 20 февраля 2011

Оказывается, у меня была ссылка на другой набор сущностей в моем хранилище и ссылка на другой набор в моем проекте с фиктивными данными.

...