【问题标题】:insert and select all data entity framework and SP插入并选择所有数据实体框架和 SP
【发布时间】:2018-03-28 08:49:00
【问题描述】:

我有一个在表中插入数据的 sp。该表有pk_id、doc_id等字段。插入后我想根据 doc_id 获取所有记录

ALTER PROCEDURE [dbo].[insertTable]
    @doc_id int
    ,......
AS
BEGIN

// Insert
INSERT INTO [dbo].[Table]
       (
            doc_id
           ,..........
       )
 VALUES
       (
            @doc_id
           ,.......
       )           

// Select all records based on doc_id 
select * from [dbo].[Table] where doc_id = @doc_id

END

创建 Sp 后,我用这个 SP 更新了我的 EF 模型。在我的 context.cs 文件中,我发现返回类型是 int,如果我的 SP 只是插入,这是有道理的。

我按照this 文章使用复杂类型和函数导入来更改返回类型。但是当我尝试“获取列信息”时,我得到这个“选定的 SP 或函数不返回任何列”

我想要this 之类的东西,但不是在需要第一个 int 和第二个列表中重新调整两个列表。

我需要对我的代码进行哪些更改

这是我在控制器中调用 sp 的方式

   List<Table> List = new List<Table>();

   using (Entities entities = new Entities())
       List = (entities.insertTable(1, ......)).ToList();

   var result = new { List = List != null ? List: new List<Table>()};
   return Json(result, JsonRequestBehavior.AllowGet);

但这不起作用。我在 List = (entities.insertTable(1, ......)).ToList(); 行中遇到错误我认为这很明显,因为我得到了两个结果集

任何帮助将不胜感激

【问题讨论】:

  • 所有存储过程都返回一个整数来表示该过程是否执行成功。因此整数 (1,0)。但是为什么要在Insert 过程中组合不同的功能呢?将它们分开并调用相应的代码。
  • 如果我可以一次调用,我不想进行两次数据库调用。插入并显示结果

标签: c# sql-server entity-framework model-view-controller


【解决方案1】:

您可以在您的 dbcontext 上调用 Database.SqlQuery

context.Database.SqlQuery<DtoType>("insertTable @param1",
     new SqlParameter("param1", 1));

您只需要为结果集提供一个 DTO 类型。在本例中为 Table

希望对你有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多