C# 如何执行从EFCore返回单个值的存储过程?
在我的应用程序中,我有三个insert存储过程,需要使用EF Core执行这些过程(这在ASP.NET Core Web API 3.1中) 以下是存储过程 spInsertPersonC# 如何执行从EFCore返回单个值的存储过程?,c#,entity-framework-core,C#,Entity Framework Core,在我的应用程序中,我有三个insert存储过程,需要使用EF Core执行这些过程(这在ASP.NET Core Web API 3.1中) 以下是存储过程 spInsertPerson create proc spInsertPerson @FirstName VARCHAR(255), @Lastname VARCHAR(255) AS BEGIN INSERT INTO Person( FirstName, LastName ) VALUES ( @F
create proc spInsertPerson
@FirstName VARCHAR(255),
@Lastname VARCHAR(255)
AS
BEGIN
INSERT INTO Person( FirstName, LastName ) VALUES ( @FirstName, @LastName )
SELECT @@SCOPE_Identity() as NewId
END
spPublishData
CREATE PROC spspPublishData
@Data VARBINARY(MAX),
@scriptId int,
@sequanceId int OUTPUT
as
begin
INSERT INTO PubslishRegistry( data, scriptRegisterid ) values ( @data , scriptId )
--some triiggers will fire and fill some tables along
SELECT @sequanceId = FN_RANDOMIZED( CRC ) FROM [dbo].[hexa32pgr66] where scriptId = @scriptId
end
spBulkSaveContent
CREATE spBulkSaveContent
@publisherId int
@dtPublishersCollection PublisherType READONLY, -- SQL user defined data type
@dtStoresCollection StoresType READONLY
as
begin
-- code written to save data
end
在Web API DBCOntext中
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
//.....other entries here
modelBuilder.Entity<Flag>().HasNoKey();
// ....other entries here
}
在服务
类中,我创建了保存数据的方法
public async Task<Int> Save(PersonDTO obj)
{
string sqlQuery = $"exec spInsertPerson @FirstName, @Lastname";
var flag = await this._context.Set<Flag>().FromSqlRaw<Flag>(sqlQuery,
new SqlParameter("@FirstName", obj.FirstName),
new SqlParameter("@Lastname", obj.LastName)
).FirstOrDefaultAsync();
return flag.NewId;
}
公共异步任务保存(PersonDTO obj)
{
字符串sqlQuery=$“exec spInsertPerson@FirstName,@Lastname”;
var flag=wait this.\u context.Set().FromSqlRaw(sqlQuery,
新的SqlParameter(“@FirstName”,obj.FirstName),
新的SqlParameter(“@Lastname”,obj.Lastname)
).FirstOrDefaultAsync();
return flag.NewId;
}
但我得到了这个错误:
使用不可组合的SQL调用了FromSqlRaw或FromSqlInterpolated,并在其上组合了一个查询
考虑在FromSqlRaw或FromSqlInterpolated方法之后调用AsEnumerable在客户端执行合成
如何解决这个问题,然后如何执行上面提到的三个存储过程并从我的服务中检索它们的数据
我这样做是否正确?此代码试图将
IQueryable
(from.FromSqlRaw
)转换为DBSet
(from.Set
)
public async Task<Int> Save(PersonDTO obj)
{
string sqlQuery = $"exec spInsertPerson @FirstName, @Lastname";
var flag = await this._context.Set<Flag>().FromSqlRaw<Flag>(sqlQuery,
new SqlParameter("@FirstName", obj.FirstName),
new SqlParameter("@Lastname", obj.LastName)
).FirstOrDefaultAsync();
return flag.NewId;
}
public async Task<Int> Save(PersonDTO obj)
{
string sqlQuery = $"exec spInsertPerson @FirstName, @Lastname";
var flag = await this._context.Set<Flag>().FromSqlRaw<Flag>(sqlQuery,
new SqlParameter("@FirstName", obj.FirstName),
new SqlParameter("@Lastname", obj.LastName)
).FirstOrDefaultAsync();
return flag.NewId;
}
public async Task<Int> Save(PersonDTO obj)
{
string sqlQuery = $"exec spInsertPerson @FirstName, @Lastname";
var flag = await this._context.Set<Flag>().FromSqlRaw<Flag>(sqlQuery,
new SqlParameter("@FirstName", obj.FirstName),
new SqlParameter("@Lastname", obj.LastName)
).ToList().FirstOrDefaultAsync();
return flag.NewId;
}