ASP.NET 5 MVC 6 patrón de repositorio genérico

asp.net-core asp.net-core-mvc c# entity-framework-core

Pregunta

He estado buscando por todas partes un tutorial o algo así.

He estado tratando de implementar mi antiguo patrón de repositorio genérico para MVC5 en un nuevo proyecto MVC6.

Configuré .Core , .Data y .Service la biblioteca de 3 clases. Sin embargo, hay un problema con IDBset , parece que a mi intellisense no le gusta, intenté agregar System.Data y Entity framework 6 pero sin suerte (no puedo encontrarlo ...confuso).

Después de deambular por google, decidí preguntar aquí: ¿hay un tutorial con la forma correcta o alguien puede lanzar un patrón de Repositorio Genérico MVC6 muy simple? Tengo la sensación de que el antiguo método de hacerlo puede haber cambiado, pero parece que no puedo encontrar otra información que no sea el DI incorporado.

Código: mi interfaz IDbContext

IDbSet<TEntity> Set<TEntity>() where TEntity : BaseEntity;

no ve IDbSet , esto simplemente debido a Entity Framework? Tengo las referencias a ello.

El problema puede ser que no puedo encontrar la declaración de uso para el marco de la entidad.

ACTUALIZAR:

Utilizando Entity framework 8.0.0 beta. Cambia todas las referencias de IDbset a DbSet.

Sin embargo, en mi repositorio genérico donde uso métodos como:

IDbSet<TEntity> Set<TEntity>() where TEntity : BaseEntity;

"Buscar" no es un método. y ya no puedo usar "DbEntityValidationException" en mis capturas.

Respuesta aceptada

Entity Framework 7 Beta 8 no viene con el método Find. Probablemente será agregado antes del lanzamiento final.

Tendrá que usar el método FirstOrDefault lugar hasta que eso suceda

public virtual T GetById(int id)
{
    return this.Entities.FirstOrDefault(x => x.Id == id);
}

Como no se reconocerá la propiedad de Id , tendrá que agregar una interfaz y hacer que su repositorio la implemente.

public virtual T GetById(int id)
{
    return this.Entities.FirstOrDefault(x => x.Id == id);
}

p.ej

public virtual T GetById(int id)
{
    return this.Entities.FirstOrDefault(x => x.Id == id);
}

De la lista de temas de github . EF7 no realiza la validación automática de datos, por lo que DbEntityValidationException no existe en EF7.

Tome nota: EF7 no es una actualización de EF sino una reescritura.


Respuesta popular

Al contrario de la respuesta de Firste, no estoy seguro al usar FirstOrDefault, ya que generará un SELECT TOP 1 [...].

En muchos casos, la identificación debe ser única, pero a veces puedes tener DB de mal diseño. Si no, su aplicación debería lanzar una excepción (eso es lo que estamos cuidando).

Entonces, hasta que EF7 implemente un método Find (), sugiero fuertemente usar SingleOrDefault () :

public virtual T GetById(int id)
{
    return this.Entities.SingleOrDefault(x => x.Id == id);
}

De esa manera, agrega un control de aplicación para verificar que la identificación debe ser única, sin importar si la Db se realiza correctamente o no. Añade otro nivel de seguridad a tu negocio.




Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué