13

¿Alguien puede ayudarlo? He estado viendo los videos de la tienda MVC y he creado mi propio sitio web usando estas técnicas, es decir, DDD, el patrón Repositorio, pero deseo utilizar Entity Framework.Uso del patrón de repositorio con Entity Framework (mvc storefront)

En las interfaces, devuelve IQueryable pero con Entity Framework ¿debería devolver ObjectQuery? - Estaré usando LINQ.

También en el ejemplo de storedfront dice algo así: IQueryable < Categoría > GetCategories();

También en la tienda MVC la clase Categoría era una clase de entidad construida (clase estándar) pero con Entity Framework estas clases están pre compiladas en el contexto del objeto, ¿no es así?

Entonces, ¿debería necesitar construirlos?

Estoy un poco confundido. Si alguien tiene algún ejemplo o código útil, sería realmente útil.

Como digo, he visto los videos de la tienda MVC usando linq2sql pero realmente me gustaría usar Entity Framework.

¿Alguna idea?

Gracias

Smithy

Respuesta

9

Permítanme responder a sus preguntas una a la vez:

sus repositorios deben volver IQueryable <T>, no ObjectQuery. La razón es que el propósito del patrón de repositorio es abstraer los detalles de su almacén de datos. Esto le permite hacer cosas como sustituir un repositorio simulado cuando prueba sus controladores por unidades. Si haces que el repositorio devuelva ObjectQuery, entonces no estás abstrayendo el Entity Framework. Otra forma de decir esto es que los usuarios de su repositorio no deben saber, en la medida de lo posible, que es el Entity Framework el que está haciendo el mapeo O/R.

Para utilizar las mayores y menores que los símbolos en el texto de párrafo en el desbordamiento de la pila, debe escapar de ellos como lo haría en HTML, es decir:

&lt; 

No es necesario hacer esto en una bloque de código; en los bloques de código, simplemente escriba el símbolo menor que/mayor que.

2

No estoy seguro de si es correcto, pero estoy usando L2E, traduciendo objetos generados a objetos de dominio usando AutoMapper herramienta de terceros.

5

Empecé como usted hace unas semanas, verá que es bastante fácil trabajar con EF. Mi proyecto es pequeño, así que estoy usando las entidades generadas por EF como mis clases modelo, y puedes agregar tu propia lógica usando una clase parcial.

Aquí es un método simple de uno de mis repositorios, como un ejemplo:

/// <summary> 
    /// Finds a user by it's credentials 
    /// </summary> 
    /// <param name="oUser"></param> 
    /// <returns></returns> 
    public User FindByCredentials(string username, Byte[] password) 
    { 
     User user = null; 

     if (!Validators.IsStringEmptyOrNull(username)) 
     { 
      user = this.FindByCredentialsQuery(username, password).FirstOrDefault<User>(); 
     } 

     return (Validators.IsNull(user)) ? new User() : user; 

    } 


    /// <summary> 
    /// Finds a user by it's credentials 
    /// </summary> 
    /// <param name="username"></param> 
    /// <param name="password"></param> 
    /// <returns></returns> 
    protected IQueryable<User> FindByCredentialsQuery(string username, Byte[] password) 
    { 
     var query = from Users in this.UserDataContext.Users 
        where 
         (Users.Username == username) && 
         (Users.Password == password) && 
         (Users.Enabled == true) 
        select Users; 


     return query; 
    } 

en cuenta que yo estoy usando IQueryable sólo dentro del repositorio, y devolver sólo la lista de entidades requeridas. De esta forma puedo controlar que la consulta a DB siempre se ejecute dentro del Repo.

+0

Me preguntaba sobre esto yo mismo. Devolver IQueryable aplaza la ejecución de la consulta, ¿verdad? ¿Entonces el contexto y la conexión están rondando? – CodeGrue

Cuestiones relacionadas