我正在使用EF Core,我相信它也被称为EF 7?无论如何,我有一个存储过程返回自定义结果,不会识别任何特定的表。我该如何访问这些结果以及如何调用sql命令?
通常我们必须使用.FromSql,但这仅适用于实体,例如。 _context.User.FromSql()。我没有实体。
所以我尝试为结果构建一个dbset / entity,但同样没有关联的表,也没有“Key”。我应该如何解析自定义结果的数据?
答案 0 :(得分:0)
您可以为存储过程的结果创建虚假实体。您可以将任何属性设置为Key,即使在存储过程的结果中,键值也不是唯一的。
例如,如果您有如下表格:
CREATE TABLE [dbo].[banana_hoard]
(
[id] INT NOT NULL PRIMARY KEY IDENTITY (1,1),
[owner] NVARCHAR(64) NOT NULL,
[bananas] BIGINT NOT NULL
)
您可以使用不返回行ID的查询,如下所示:
public class Program
{
public static void Main(string[] args)
{
using (var db = new MonkeyDbContext())
{
var sp_results = db.search.FromSql(@"execute <YOUR_STORED_PROC>");
str_result = String.Join("\n", sp_results.Select(a => JsonConvert.SerializeObject(a) ));
Console.WriteLine("stored proc result :\n" + str_result);
}
}
}
public class MonkeyDbContext : DbContext
{
public DbSet<StoredProcRow> search { get; set; }
protected override void OnConfiguring (DbContextOptionsBuilder builder)
{
builder.UseSqlServer(@"Server=(localdb)\monkey_db;Database=monkey_db;Trusted_Connection=True;");
}
}
public class StoredProcRow
{
[Key]
public string Owner { get; set; }
public long Bananas { get; set; }
}