【问题标题】:EF Core custom results from stored procedure来自存储过程的 EF Core 自定义结果
【发布时间】:2016-10-30 17:03:45
【问题描述】:

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

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

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

【问题讨论】:

  • EF Core 仍处于预发布状态。有很多东西不见了。甚至还没有添加订单数据注释。就个人而言,我不将 EF 用于存储过程。这只是一个无用的额外层,会降低效率。
  • 谢谢,我愿意接受任何想法。我可以用什么代替?是否只能废弃整个项目并使用不同版本的 ef 重新启动?
  • 我也在使用 MVC Core。
  • 我不会尝试在 MVC Core 应用程序中学习 ADO.NET,因为那也是预发布版本,几乎没有文档。 Here is a tutorial that will get you started。在 ASP.NET Core 中使用 ADO.NET 非常相似,但并不完全相同。
  • 没问题。我不会降级该项目。我将创建一个针对 .NET Framework 4.6.1 的新标准 ASP.NET Web 应用程序 (.NET Framework) 项目。然后,在 ADO.NET 工作后,您可以在 ADO.NET Core 中查找等效的命名空间。当您达到这一点时,请在 SO 上发布另一个问题。也许我会看到它并发布一些示例代码。但你需要先学习基础知识。

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


【解决方案1】:

您可以为存储过程的结果创建一个假实体。您可以将任何属性设置为 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; }
}

【讨论】:

    猜你喜欢
    • 2020-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多