存储过程

时间:2016-06-28 11:29:52

标签: asp.net sql-server entity-framework

我正在使用EF Core,我相信它也被称为EF 7?无论如何,我有一个存储过程返回自定义结果,不会识别任何特定的表。我该如何访问这些结果以及如何调用sql命令?

通常我们必须使用.FromSql,但这仅适用于实体,例如。 _context.User.FromSql()。我没有实体。

所以我尝试为结果构建一个dbset / entity,但同样没有关联的表,也没有“Key”。我应该如何解析自定义结果的数据?

1 个答案:

答案 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; }
}