不使用DbRawSqlQry在实体框架中调用过程

时间:2016-07-15 12:11:14

标签: c# entity-framework-6

我按以下方式调用存储过程。但是当我在sqlProfiler中观察它时,实体框架没有调用来执行存储过程。

 objUnit.dbContext.Database.SqlQuery<ResellerCustomerFile>("USP_ResellerCustomerFile_DeleteFiles @CustomerId, @FileId, @IsFile",
                new SqlParameter("@CustomerId", customerId),
                new SqlParameter("@FileId", fileId),
                new SqlParameter("@IsFile", 1));

如果我通过在上面的语句末尾添加 .Tolist(),.FirstOrDefault()等来更改我的代码,那么调用将记录在SqlProfiler中,但它会填充datareader并开始映射记录我通过 TEntity 的数据阅读器。

但我的存储过程只更新记录而且不会返回任何内容。现在我该如何调用我的存储过程。

1 个答案:

答案 0 :(得分:1)

使用objUnit.dbContext.Database.ExecuteSqlCommand代替objUnit.dbContext.Database.SqlQuery<ResellerCustomerFile>

SqlQuery需要返回值,这就是您必须将ResellerCustomerFile声明为通用返回类型的原因。

ExecuteSqlCommand是一个没有返回值的命令,使用此方法直接执行命令。

objUnit.dbContext.Database.ExecuteSqlCommand("USP_ResellerCustomerFile_DeleteFiles @CustomerId, @FileId, @IsFile",
    new SqlParameter("@CustomerId", customerId),
    new SqlParameter("@FileId", fileId),
    new SqlParameter("@IsFile", 1));