2011-03-04 20 views
6

estoy usando mog por burlarse de un repositorio con LINQ a SQL como esto:repositorio que imita con Entity Framework

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); 
} 

Cómo se puede cambiar esta función para el marco de la entidad, si lo estoy usando como esto:

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

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

Ahora estoy usando DbSet.

Respuesta

2

Bueno, ya IProductsRepository implementos IEntities usted debe tener una propiedad

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

allí, pero lo que me gustaría hacer es añadir un método Fetch-IProductRepository como

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

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

Luego, en su MockProductsRepository cambie la línea de configuración de la siguiente manera:

mockProductsRepos.Setup(x => x.FetchAll()).Returns(prods.AsQueryable()); 
Cuestiones relacionadas