У меня есть работающая хранимая процедура, которая работает при вызове из старого ADO.NET. Ниже это:Entity Framework: не удается вызвать хранимую процедуру, неправильное формирование кода
GO
ALTER procedure [dbo].[GetParentID]
@SSHIP_AppID as varchar(50),
@ParentID as varchar(150) OUTPUT
AS
BEGIN
SET NOCOUNT ON;
SELECT @ParentID = a.iBuild_GUID
FROM dbo.XRef_iBuild_SSHIP as a
WHERE a.SSHIP_appId = @SSHIP_AppID
AND a.SSHIP_appId <> ''
END
В ADO.NET, он принимает APPID и просто возвращает строку ParentID:
private string GetParentId(string appId)
{
var connection = new SqlConnection();
string parentId = String.Empty;
try
{
connection.ConnectionString = "Data Source="blah...";
var command = new SqlCommand("GetParentId", connection);
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add(new SqlParameter("@SSHIP_AppID", appId));
SqlParameter parent = new SqlParameter("@ParentID", SqlDbType.VarChar, 255);
parent.Direction = ParameterDirection.Output;
command.Parameters.Add(parent);
connection.Open();
command.ExecuteNonQuery();
parentId = (command.Parameters["@ParentID"].Value).ToString();
}
catch (Exception ex)
{
Logger.LogError(appId, ex.ToString(), "Interface12 - Cannot get ParentId", null, "", 0, "Interface12");
}
finally
{
connection.Close();
}
return parentId;
}
Вот то, что EF генерирует, когда я делаю функции импорта из хранимой процедуры :
public virtual int GetParentID(string sSHIP_AppID, ObjectParameter parentID)
{
var sSHIP_AppIDParameter = sSHIP_AppID != null ?
new ObjectParameter("SSHIP_AppID", sSHIP_AppID) :
new ObjectParameter("SSHIP_AppID", typeof(string));
return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction("GetParentID", sSHIP_AppIDParameter, parentID);
}
Это правильно? Если да, могу ли я создать пример кода для получения родительского идентификатора? Если нет, то как я могу создать что-то лучше?
Посмотрите в использовании «с использованием()» вокруг SqlConnection и SqlCommand объектов – Quintium