Пересмешивающий репозиторий с Entity Framework - PullRequest
6 голосов
/ 04 марта 2011

Я использую mog для моделирования хранилища с помощью LINQ to SQL, например:

public static IProductsRepository MockProductsRepository(params Product[] prods){
    // Generate an implementer of IProductsRepository at runtime using Moq
    var mockProductsRepos = new Mock<IProductsRepository>();
    mockProductsRepos.Setup(x => x.Products).Returns(prods.AsQueryable());
    return mockProductsRepos.Object;
}

public interface IProductsRepository{
    IQueryable<Product> Products { get; }
    void SaveProduct(Product product);
    void DeleteProduct(Product product);
}

Как я могу изменить эту функцию для платформы Entity, если я использую ее следующим образом:

public interface IProductsRepository : IEntities{
    EntityState GetEntryState(object entry);
    void SetEntryState(object entry, EntityState state);
    void Commit();
}

public interface IEntities{
    DbSet<Product> Products { get; set; }
}

Теперь я использую DbSet.

1 Ответ

2 голосов
/ 30 марта 2011

Что ж, поскольку IProductsRepository реализует IEntities, у вас должно быть свойство

public DbSet<Product> Products { get; set; }

, но я бы добавил, добавив метод Fetch к IProductRepository, как

public interface IProductsRepository : IEntities
{
    EntityState GetEntryState(object entry);
    void SetEntryState(object entry, EntityState state);
    void Commit();

    // New method
    IQueryable<Product> FetchAll();
}

Затем в вашем MockProductsRepository измените строку настройки следующим образом:

mockProductsRepos.Setup(x => x.FetchAll()).Returns(prods.AsQueryable());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...