Я использую сущность framework и azure для db. Дело в том, что EF не работает нормально с хранимыми процедурами, когда они не возвращают поля из моделей. Автоматически сгенерированный код в файле model.Context.cs возвращает целое число.Использование EntityCommand для вызова хранимых процедур, но результат всегда пуст
public virtual int GetLogTransaction(Nullable<long> transactionId)
{
var transactionIdParameter = transactionId.HasValue ?
new ObjectParameter("transactionId", transactionId) :
new ObjectParameter("transactionId", typeof(long));
return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction("IHUBEntities.GetLogTransaction", transactionIdParameter);
}
Поэтому я решил избежать этого файла и использовать EntityCommand для подключения к db и выполнения моей процедуры.
EntityConnection sqlConnection = new EntityConnection("name=IHUBEntities");
sqlConnection.Open();
using (EntityCommand cmd = sqlConnection.CreateCommand())
{
LogTransactionInfor lgInfor = new LogTransactionInfor();
try
{
cmd.CommandText = "IHUBEntities.GetLogTransaction";
cmd.CommandType = CommandType.StoredProcedure;
EntityParameter param = new EntityParameter();
param.Value = transactionId;
param.ParameterName = "transactionId";
cmd.Parameters.Add(param);
using (EntityDataReader reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess))
{
while (reader.Read())
{
//get reader content here
}
}
cmd.Connection.Close();
}catch (Exception ex)
{
lgInfor.err = ex.StackTrace;
Console.Write(ex.StackTrace);
cmd.Connection.Close();
}
finally
{
cmd.Dispose();
}
return lgInfor;
}
Проблема заключается в том, что читатель всегда пуст, дайте мне нулевые результаты. Однако, когда я использую один и тот же входной параметр для тестирования на db sql, он вернет желаемый результат. Итак, я думаю, проблема может быть связана с тем, что я написал процедуру?
CREATE PROCEDURE [dbo].[GetLogTransaction]
@transactionId bigint = 0
AS
DECLARE
@tablename nvarchar(261),
@obj_name nvarchar(4000),
@pk bigint,
@pk_name nvarchar(500),
@opt nvarchar(20),
@usrId bigint,
@usrName nvarchar(200),
@sql nvarchar(4000),
@cn int
DECLARE
@userTable table(
usrId bigint,
usrName nvarchar(200)
)
BEGIN
//select from different tables and set values to parameters
......
select @obj_name as obj_name, @pk as pk, @pk_name as pk_name, @opt as opt, @usrId as usrId, @usrName as usrName
END
Большое вам спасибо за это! Оно работает. Я совершенно новичок в структуре сущности, и эта проблема вызывает у меня сумасшествие в течение нескольких дней. – mazeRunner