ASP.NET MVC 通过 ExecuteSqlCommand 获取插入项的 ID

2024-03-27

我在 ASP.NET MVC3 项目中插入以下内容:

var query = "INSERT INTO MyTable VALUES(//some values)";
db.Database.ExecuteSqlCommand(query);

有没有简单的方法获取插入的行ID?

EDIT:

我的存储过程:

CREATE PROCEDURE addGetID
( 
    @PersonnelID INT,
    @ShiftWorkID BIGINT,
    @EntranceDateTime DATETIME,
    @WorkflowStateRelationID BIGINT
)
AS
INSERT INTO DynamicDataEntrances VALUES (@PersonnelID, @ShiftWorkID, @EntranceDateTime, @WorkflowStateRelationID)
SELECT @@IDENTITY

我的代码行:

string dt = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
SqlParameter PersonnelID = new SqlParameter("@PersonnelID", 1);
SqlParameter ShiftWorkID = new SqlParameter("@ShiftWorkID", 2);
SqlParameter EntranceDateTime = new SqlParameter("@EntranceDateTime", dt);
SqlParameter WorkflowStateRelationID = new SqlParameter("@WorkflowStateRelationID ", db.WorkflowStateRelations.Where(wsr => wsr.WorkflowID == dp.WorkflowID).Select(x => x.ID).FirstOrDefault());
SqlParameter returnValue = new SqlParameter();
returnValue.Direction = ParameterDirection.ReturnValue;

// try 1
db.Database.ExecuteSqlCommand("addGetID(@PersonnelID, @ShiftWorkID, @EntranceDateTime, @WorkflowStateRelationID )", PersonnelID, ShiftWorkID, EntranceDateTime, WorkflowStateRelationID, returnValue);

// try 2
db.Database.ExecuteSqlCommand("addGetID @PersonnelID @ShiftWorkID @EntranceDateTime @WorkflowStateRelationID ", PersonnelID, ShiftWorkID, EntranceDateTime, WorkflowStateRelationID, returnValue);

// try 3
db.Database.ExecuteSqlCommand("exec addGetID @PersonnelID={0} @ShiftWorkID={1} @EntranceDateTime={2} @WorkflowStateRelationID={3} ", PersonnelID, ShiftWorkID, EntranceDateTime, WorkflowStateRelationID, returnValue);

var id = returnValue.Value;

我同意[scartag][1]关于这一点的观点。但要分两部分回答你的问题。

如果您要使用直接 sql,那么要做的就是创建一个返回以下内容的存储过程@@IDENTITY价值。然后你用参数执行你的 SpParameterDirection.ReturnValue并使用该值。

像这样:

SqlParameter entityField = new SqlParameter("@firstName", "Frank");
SqlParameter returnValue = new SqlParameter();
returnValue.Direction = ParameterDirection.ReturnValue;
db.Database.ExecuteSqlCommand("sp_ByPassEFAndInsertEntity(@firstName)", 
                              entityField, returnValue);
var id = returnValue.Value;

或者直接使用 EF。创建并初始化您的Entity,将其添加到适用的DbSet并调用 savechanges。您的实体实例的 Id 列将使用数据库生成的值进行更新。

编辑2:我将第一个解决方案应用于我的本地数据库,并且可以让它给出返回值。经过一番研究,我得到了返回值。我有一个带有博客表的本地数据库。我创建了一个 addBlog SP,这就是获取返回值的方法 - 但您必须使用 SqlQuery,而不是使用 ExecSqlCommand。

这是我的SP:

    ALTER PROCEDURE [dbo].[addBlog] 
        @BlogName varchar(50),
        @CreateDateTime datetime
    AS
    BEGIN
        insert into Blog (Name, DateTimeCreated) values (@BlogName, @CreateDateTime)
        declare @return int
        set @return = @@identity
        select @return
    END

和我的 EF 代码:

    using (var db = new StackOverflowEntities()) {
        SqlParameter blogName = new SqlParameter("BlogName", "New Name 2");
        SqlParameter createDate = new SqlParameter("CreateDate", DateTime.Now);

        int? newIdentityValue = db.Database.SqlQuery<Int32>("addBlog @BlogName, @CreateDate", blogName, createDate).FirstOrDefault();

        Debug.WriteLine(newIdentityValue);
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ASP.NET MVC 通过 ExecuteSqlCommand 获取插入项的 ID 的相关文章

  • 是使用多个数据库各有一个架构更好,还是一个数据库有多个架构更好? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 After 这条评论 https stackoverflow com questions 1130555 postgresql pitr bac
  • Sequel Pro / MAMP 在哪里存储本地数据库?

    我通过 Sequel Pro 和 MAMP 在我的计算机上创建了一些数据库 并运行 localhost 来查看它们 但是 我全新安装了 Mac OS Lion 但忘记将数据库备份到 sql 文件 我会定期备份文件 并预装计算机的副本 有谁知
  • 存储DotNetOpenAuth信息和用户信息检索

    这个问题有点结构 设计问题 因为我无法找出执行任务的最佳方法 在我的 MVC 应用程序中 我使用 DotNetOpenAuth 3 4 作为我的登录信息提供程序 并且仅使用标准FormsAuthentication用于饼干等 DB中当前用户
  • 始终保持数据库连接打开可以吗?

    我在业余时间从事单用户桌面数据库应用程序之类的工作 并且我总是不确定我所做的设计选择 现在 就目前情况而言 每当用户想要与数据库 这是一个本地 SQLite 数据库 因此通常只有一个用户一次看到它 交互时 应用程序就会创建一个新连接 执行它
  • 如何优化 postgres 查询

    我正在运行以下查询 SELECT fat FROM Table1 fat LEFT JOIN modo captura mc ON mc id fat modo captura id INNER JOIN loja lj ON lj id
  • SqlCommand返回值参数

    也许查看此代码的其他人能够告诉我为什么 returnID 始终为 0 我正在尝试从插入的记录中检索新的 ID public int AddToInventory int PartID int QtyOnHand int SpokenFor
  • MySQL:主键的所有部分都必须为 NOT NULL;如果您需要在键中使用 NULL,请使用 UNIQUE 代替

    我的 MySQL 有问题 我创建了名为 BucketList 的数据库 然后尝试创建名为 tbl user 的表 它看起来像这样 CREATE TABLE BucketList tbl user user id BIGINT NULL AU
  • 私人消息数据库设计

    我正在创建一个简单的私人消息系统 但我不确定哪种数据库设计更好 第一个设计是一个消息表 以及一个消息评论表 Message id recipientId senderId title body created at MessageComme
  • 如何对给定列和方向的数据表进行排序?

    我需要在内存中使用基于来自 GridView 的列和方向的 DataTable 该函数需要如下所示 public static DataTable resort DataTable dt string colName string dire
  • 非关系型数据库系统

    还有哪些其他类型的数据库系统 我最近遇到了以非关系方式处理数据的 couchDB 这让我思考其他人正在使用哪些其他模型 所以 我想知道还有哪些其他类型的数据模型 我不是在寻找任何细节 只是想看看其他人是如何处理数据存储的 我的兴趣纯粹是学术
  • 仅包含主键和外键的数据库表的用途是什么?

    我试图理解一个简单的音乐数据库设计 有些表只包含外键和主键 我不确定如何以及何时使用这些表或向其中插入什么内容 设计如下 Track id primary key title duration live performance true o
  • 如何使用flyway将数据从一个DB迁移到另一个DB?

    我在不同的服务器上有两个 postgreSql DB 比如说 A 和 B 我可以使用 Flyway 一些如何将所有数据从 DB A 复制到新设置且为空的 B 如果有人指出我正确的方向和工具 这将很有帮助 要求是通过某种工具自动化将数据从一个
  • 用于客户端存储和服务器端同步的javascript库[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个 javascript 库 它可以让我将数据存储在客户端数据库中 并在后台自动将数据库同
  • 当我尝试连接到数据库时收到“错误:无法初始化 OLE”? C#

    我正在尝试通过 C 连接到数据库 但这样做时收到一条非常无用的错误消息 08 44 17 错误 无法初始化 OLE 08 44 17 错误 无法初始化 OLE 我尝试寻找解决方案 但没有成功 我也尝试重新启动计算机 但这也没有帮助 我正在运
  • 防止 Django 在并发请求时多次将同一对象保存到数据库

    对于我们的博客平台 我们有一个 文章 模型 其中包含一个 更新的 日期时间字段 class Article models Model updated models DateTimeField null True blank True 当任何
  • 如何跟踪数据库连接泄漏

    我们有一个应用程序似乎存在连接泄漏 SQL Server 表示已达到最大池大小 我独自一人在我的开发机器上 显然 只需导航应用程序 我就会触发此错误 SQL Server 活动监视器显示大量正在使用我的数据库的进程 我想查找哪些文件打开连接
  • 如何使用 django 更新会计应用程序中的余额?

    我正在学习 Django 尝试制作一个会计应用程序来跟踪我的开支等 我使用两种模型创建数据库 一种用于帐户 一种用于操作 但我不知道如何在每次操作时更新我的 余额 我在想 也许每次我保存一个新操作时 我都会通过覆盖操作模型的保存方法来更新余
  • 如何通过逗号分隔将 2 行合并为一行?

    我需要将这些单独的行合并到一列 我现在如何通过逗号分隔合并列 CID Flag Value 1 F 10 1 N 20 2 F 12 2 N 23 2 F 14 3 N 21 3 N
  • 如何对 mongodb/mongoid 脚本进行基准测试,以比较两种不同的查询技术

    您对如何测试两种不同的 mongoid mongodb 查询实现的性能有什么建议吗 要比较的实现与以前的相关 问答 https stackoverflow com questions 10121977 extracting modellin
  • 自定义 php 论坛 - 显示新的/未读的帖子

    我自己使用 php 编写了一个自定义论坛脚本 我决定不使用 phpbb 和其他工具 因为我希望我所做的事情具有 100 的灵活性 不过我遇到了一个问题 如何向用户显示帖子是否是新的 未读的 我想到了两种解决方案 1 饼干 2 数据库 我不想

随机推荐

  • 在 Outlook 2013 中调用功能区按钮

    我们有一个 Outlook 插件 我们需要以编程方式取消任务项检查器窗口中的任务分配 就像取消分配按钮一样 人们会认为调用TaskItem CancelResponseState 可能会起作用 虽然它确实取消了分配 但它也使任务处于不可分配
  • 使用 RequestAnimationFrame 实现准确计时

    到目前为止 我还没有找到很多关于这个主题的文档 我的总体感觉是 在为浏览器实现动画时 最好使用 RequestAnimationFrame 而不是 bog 标准 JavaScript 计时器 我的理解是计时器不可靠 并且它们的分辨率在不同浏
  • Windows 8 Phone - 访问 NFC 读卡器?

    简短的问题 我可以使用支持 NFC 的 Windows Phone 8 读取信用卡信息吗 长问题 NFC 与信用卡如何工作 卡 或具有钱包功能的手机 通过 NFC 接收请求并以某种标准化格式回复明文信用卡信息 那么 钱包选项在广播信用卡信息
  • 传送仅公开 C api 的 C++ dll

    我正在编写一个软件 其 API 仅为 C 语言 因为很容易将 C 代码与其他软件 客户端链接起来 然而 实际的程序代码是用 C 完成的 使用所有常见的 C 功能 如异常 STL 等 导出的 API 标头本身将用纯 C 编写 其中export
  • 如何使用 pandas tz_convert 转换为多个不同时区

    我有一些数据如下所示hour以世界标准时间 UTC 表示 我想创建一个名为的新列local hour基于time zone 我怎样才能做到这一点 好像是熊猫的tz convert不允许列或 pandas 系列作为输入tz争论 Create
  • Rails ActionController::Metal 的实际作用是什么

    我想了解一下Rails ActionController 金属控制器 我读过相关内容here http api rubyonrails org classes ActionController Metal html但不完全理解 它用于构建
  • 对 DataGrid 组进行排序

    我有一个非常基本的DataGrid以及一些测试数据 数据作为ObservableCollection
  • 应用程序崩溃时 QSharedMemory 不会被删除

    我正在使用实现一个应用程序Qt C 我用过的地方QSharedMemory限制应用程序的多个实例 相关代码段在main cpp如下 QSharedMemory sharedMemory sharedMemory setKey SM INST
  • 用于对重复 UPDATE 进行 UPSERT 或 INSERT 的 MERGE 语法

    所以我来自 MySQL 我可以做插入重复更新 http dev mysql com doc refman 5 0 en insert on duplicate html INSERT INTO table a b c VALUES 1 2
  • 是否可以从字符串中获取 Swift 类型?

    我想知道是否可以动态获取 Swift 类型 例如 假设我们有以下嵌套结构 struct Constants struct BlockA static let kFirstConstantA firstConstantA static let
  • filecmp.cmp() 什么时候会返回误报或漏报?

    使用 Windows 7 我有两个文件夹 一个是我处理文件的 Master 文件夹 另一个是 NAS4Free 服务器上的 Backup 文件夹 我有超过 800 个 jpg 文件 总计 2 6GB 大小从 124KB 到 16MB 不等
  • 核心数据:避免多对多关系中的循环引用

    我仍在学习 iOS 开发和使用 Core Data 的方法 并且刚刚遇到了保留周期 根据我阅读 核心数据编程指南 的理解 在完成关系处理后 您可以使用托管对象上下文方法refreshObject mergeChanges以确保保留周期被打破
  • 如何使用MaterialAlertDialogBu​​ilder精细?

    当我使用dialog builder时 字体大小是正确的 但是当我使用MaterialAlertDialogBu ilder时 正文文本的字体大小较小 没关系 implementation com google android materi
  • 诗歌是否忽略了额外内容或 pyproject.toml 配置错误? [复制]

    这个问题在这里已经有答案了 我有一个由诗歌创建的新项目 yolo 我做了以下步骤 poetry new poetry add requests poetry add D pytz poetry add D optional extras d
  • 如何设置Kubernetes启动的容器的workdir

    使用 Kubernetes 启动容器时是否可以设置工作目录 是的 通过workingDir领域的集装箱规格 https kubernetes io docs reference kubernetes api workload resourc
  • 确定多维numpy数组中是否至少有一个零

    我有以下代码 存在一个 numpy 数组multidimensional array其中要么全是整数且没有零 要么是多个整数中只有一个零 zeros list for line in multidimensional array if fi
  • 使用生成器表达式而不是列表进行排序()

    看到这里的讨论后 Python 生成时差 https stackoverflow com questions 4154116 python generate the time difference 4154298 4154298我很好奇 我
  • Python 使用 tabulate 打印列表

    我正在尝试打印天文学模拟的输出 以便它在我的控制台中看起来不错 我生成了 4 个 numpy 数组 分别称为振幅 质量 周期和偏心率 我想将它们放在一个表中 每个数组的第一个索引是行星 1 的值 第二个索引是行星 2 的值 依此类推 所以我
  • 构建失败 Sphinx 错误内容.rst 未找到

    我按照阅读文档的说明进行操作 但收到此错误 bash Sphinx 错误 主文件 home docs checkouts readthedocs org user builds mybinders checkouts latest docs
  • ASP.NET MVC 通过 ExecuteSqlCommand 获取插入项的 ID

    我在 ASP NET MVC3 项目中插入以下内容 var query INSERT INTO MyTable VALUES some values db Database ExecuteSqlCommand query 有没有简单的方法获