2011-04-11 24 views
8

Estoy utilizando el primer enfoque de código de entidad de marco y estoy creando una clase de Repositorio genérico que proporciona acceso a datos. En esta clase, quiero un método Add(T entity). Sin embargo, no hay InsertOnSubmit método como parte de la clase DbSet<T>, y si trato de utilizar el método Add, me sale un error de compilación tiempo:InsertOnSubmit equivalente en DbContext.DbSet utilizando el código de Entity Framework 4 primero

The type 'TEntity' must be a reference type in order to use it as parameter 'TEntity' in the generic type or method 'System.Data.Entity.DbContext.Set<TEntity>()' 

Este es el método:

public TEntity Add(TEntity entity) 
{ 
    return _database.Set<TEntity>().Add(entity); 
} 

Alguien sabe una forma de evitar esto?

Gracias

+0

para uso personal, podría pedir que lo "_database" está en su aplicación? Estoy intentando hacer un método como el tuyo y se queja del método Set ... ¡Gracias de antemano! –

+0

yeh man, el campo _database es del tipo DbContext, que se encuentra en el marco de la entidad. eche un vistazo al blog de ScotGu sobre el uso del primer enfoque del código de entity framework 4, es realmente simple: http://weblogs.asp.net/scottgu/archive/2010/07/16/code-first-development-with-entity-framework -4.aspx – jcvandan

+0

Gracias. Tomo una lectura. Tengo una pregunta adicional: P el método .Set, ¿cuál es el código para eso? Tomé una muy rápida en el articulo, y no detecté ese método. Esa es la última parte del código que necesito para completar mi proyecto. Usted es más que bienvenido para recibir mi correo si me envió el código del método .Set. : D –

Respuesta

12

agregar una restricción genérica a su clase de repositorio:

public class Repository<TEntity> where TEntity : class 
+0

genial esa es una mejor solución +1 – jcvandan

5

he literalmente, acaba de publicar esta pregunta, pero he encontrado una solución al problema - utilizar el método en lugar de la versión genérica como tal Set (tipo T):

public TEntity Add(TEntity entity) 
{ 
    return (TEntity)_database.Set(typeof(TEntity)).Add(entity); 
} 

Un un poco de inspección intellisense va un largo camino! Espero que esto ayude a alguien ...

Cuestiones relacionadas