2009-10-01 13 views
6

Estoy tratando de usar un procedimiento almacenado en el marco de entidades que no devuelve nada. El procedimiento almacenado es puramente para el registro.Procedimientos almacenados en el marco de entidad

Agregué una función (clic derecho -> agregar -> importación de funciones) que funciona ÚNICAMENTE cuando el valor de retorno se establece en una de las entidades. Cuando cambio el tipo de retorno para que sea Int32, Bool o nada, o cualquier otro valor que no sea una entidad, la función (método) simplemente desaparece tan pronto como presiono el botón de compilación.

¿Alguna sugerencia sobre cómo puedo conseguirlo?

Respuesta

7

Por ahora no puede - tiene que usar una de las entidades definidas en su modelo (aunque pensé que los tipos escalares básicos como INT también deberían funcionar).

cosas deberían mejorar mucho con EF4 - que saldrá a finales de 2009 o comienzos de 2010.

Ver estos artículos para algo de información sobre las nuevas características:

Si su proceso almacenado es solo para iniciar sesión, probablemente solo lo expondré fuera del contexto de Entity Framework y jus Llamar al procedimiento almacenado la forma antigua de ADO.NET ... ¿por qué molestarse en poner todo eso en un contexto EF? No está recuperando, manipulando y almacenando datos con este servicio de registro, simplemente conviértalo en un método estático en una clase estática. ¡Manténgalo simple!

Marc

5

Esta es una manera de ejecutar un procedimiento almacenado desde marco enitity:

  using (SEntities se = new SEntities()) 
      { 
       EntityConnection entityConnection = (EntityConnection)se.Connection; 
       DbConnection storeConnection = entityConnection.StoreConnection; 

       storeConnection.Open(); 

       DbCommand command = storeConnection.CreateCommand(); 
       command.CommandText = "NameOfStoredProcedure"; 
       command.CommandType = CommandType.StoredProcedure; 
       command.Parameters.Add(new SqlParameter("param1", value_of_param1)); 
       command.Parameters.Add(new SqlParameter("param2", value_of_param2)); 

       SqlParameter param3 = new SqlParameter(); 
       pA.SqlDbType = SqlDbType.Bit; 
       pA.ParameterName = "@param3"; 
       pA.Direction = ParameterDirection.Output; 
       command.Parameters.Add(param3); 

       command.ExecuteNonQuery(); 

       returnValue = Convert.ToBoolean(param3.Value); 
      } 
1

De EF 4.1, es posible. Hasta Ef 4.0, no es posible. Puede utilizar las siguientes líneas para llamar sp en ef 4,1

res = ctx.Database.SqlQuery<MyResultType1>(...your SP call...); 

Para mayor aclaración, por favor refiérase Handle Stored Procedure in Entity Framework

Cuestiones relacionadas