2011-03-04 4 views
6

J'utilise MOG pour se moquant d'un référentiel avec LINQ to SQL comme ceci:référentiel Mocking avec 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); 
} 

Comment puis-je changer cette fonction pour Entity Framework si je l'utilise comme ceci:

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

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

Maintenant j'utilise DbSet.

Répondre

2

Eh bien, puisque IProductsRepository met en œuvre IEntities vous devriez avoir une

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

propriété là-bas, mais ce que je ferais est d'ajouter une méthode Fetch-IProductRepository comme

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

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

Ensuite, dans votre MockProductsRepository changez la ligne de configuration comme suit:

mockProductsRepos.Setup(x => x.FetchAll()).Returns(prods.AsQueryable()); 
Questions connexes