2012-10-03 56 views
6

Hago un mapeo aquí para tablas ... ¿Cómo mapear procedimientos almacenados aquí?Cómo mapear un procedimiento almacenado utilizando DBContext en ASP.NET MVC 3 Entity Framework

public class AppDBContext : DbContext 
{ 
    public DbSet<UserAccount> UserAccount { get; set; } 
    public DbSet<GetUserAccounts> GetGetUserAccounts { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<UserAccount>().ToTable("UserAccount"); 
     modelBuilder.Entity<Customer>().ToTable("Customer"); 

     base.OnModelCreating(modelBuilder); 
    } 
} 
+1

si está utilizando el código de EF primero, quizás esta respuesta pueda ser de ayuda: http://stackoverflow.com/a/6622949/390819 – GolfWolf

Respuesta

6

El código primero no es compatible con los procedimientos almacenados.

Puede ejecutar secuencias de comandos en una base de datos initialiser usando:

string sql = "CREATE PROCEDURE [MyProc]..."; 
context.Database.ExecuteSqlCommand(sql); 

puede ejecutar procedimientos desde el contexto de esta manera:

string command = "EXEC MyProc"; 
IEnumerable<T> results = context.Database.SqlQuery<T>(command, null); 

Personalmente, terminar con esto en un buen modelo OO . Tengo una clase SP especializada con métodos muy tipados. Estos métodos están decorados con un atributo que le dice al inicializador de DB que cree un procedimiento almacenado de un nombre dado de una fuente determinada. Los métodos de tipo fuerte llaman al procedimiento almacenado.

0

añadir esto en AppDBContext:

public virtual ObjectResult<ResultObject> MyStoredProcedure(string parameter) 
     { 
      ((IObjectContextAdapter)this).ObjectContext.MetadataWorkspace.LoadFromAssembly(typeof(ResultObject).Assembly); 

      var Param = parameter!= null ? 
       new ObjectParameter("Column", parameter) : 
       new ObjectParameter("Column", typeof(string)); 

      return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<ResultObject>("MyStoredProcedure", Param); 
     } 

Añadir esto en .edmx archivo

<FunctionImport Name="MyStoredProcedure" ReturnType="Collection(AppDBContext.ResultObject)" > 
     <Parameter Name="ZipCode" Mode="In" Type="String" /> 
     </FunctionImport> 

0

Estoy usando DB Context y DB First Approach. Después de crear procedimientos almacenados, vaya a la página modelo en VS y seleccione Actualizar modelo de la base de datos en las opciones de clic derecho en la página Modelo. luego, en el Explorador de modelos> Importaciones de funciones, selecciono los SP importados y si deseo cambiar sus nombres, devolver valores, etc. después de todo esto, podría usar SP como métodos internos u otras clases de entidad. por ejemplo, suponga que tiene un SP con el nombre "sp_UserUpdate", este SP toma userName y para el examen userAge como parámetro interno y tiene res como parámetro de salida para el estado del resultado. Después de importar SP en VS, puede usarlo igual que a continuación:

System.Data.Objects.ObjectParameter pRes = new System.Data.Objects.ObjectParameter("res", 0); 
db.sp_UserUpdate(userName , userAge , pRes); 

Espero que esta ayuda.

Cuestiones relacionadas