使用实体框架记录每个数据更改

2024-03-20

客户需要将每个数据更改与进行修改的实际用户一起记录到日志表中。该应用程序使用一个 SQL 用户来访问数据库,但我们需要记录“真实”用户 ID。

我们可以在 t-sql 中通过为每个表插入和更新编写触发器并使用 context_info 来存储用户 id 来完成此操作。我们将用户 ID 传递给存储过程,将用户 ID 存储在 contextinfo 中,触发器可以使用此信息将日志行写入日志表。

我找不到使用 EF 进行类似操作的地点或方式。所以主要目标是:如果我通过 EF 对数据进行更改,我想以半自动方式将确切的数据更改记录到表中(所以我不想在之前检查每个字段的更改)保存对象)。我们正在使用EntitySQL。

不幸的是,我们必须坚持使用 SQL 2000,因此 SQL2008 中引入的数据更改捕获不是一个选项(但也许这对我们来说也不是正确的方法)。

有什么想法、链接或起点吗?

[Edit]一些注意事项:通过使用 ObjectContext.SavingChanges 事件处理程序,我可以得到可以注入 SQL 语句来初始化 contextinfo 的点。但是我不能混合使用 EF 和标准 SQL。因此,我可以获得 EntityConnection,但无法使用它执行 T-SQL 语句。或者我可以获取EntityConnection的连接字符串并基于它创建一个SqlConnection,但它将是一个不同的连接,因此contextinfo不会影响EF所做的保存。

我在 SavingChanges 处理程序中尝试了以下操作:

testEntities te = (testEntities)sender;
DbConnection dc = te.Connection;
DbCommand dcc = dc.CreateCommand();
dcc.CommandType = CommandType.StoredProcedure;
DbParameter dp = new EntityParameter();
dp.ParameterName = "userid";
dp.Value = textBox1.Text;
dcc.CommandText = "userinit";
dcc.Parameters.Add(dp);
dcc.ExecuteNonQuery();

错误:EntityCommand.CommandText 的值对于 StoredProcedure 命令无效。 与 SqlParameter 而不是 EntityParameter 相同:无法使用 SqlParameter。

StringBuilder cStr = new StringBuilder("declare @tx char(50); set @tx='");
cStr.Append(textBox1.Text);
cStr.Append("'; declare @m binary(128); set @m = cast(@tx as binary(128)); set context_info @m;");

testEntities te = (testEntities)sender;
DbConnection dc = te.Connection;
DbCommand dcc = dc.CreateCommand();
dcc.CommandType = CommandType.Text;
dcc.CommandText = cStr.ToString();
dcc.ExecuteNonQuery();

错误:查询语法无效。

所以我在这里坚持在实体框架和 ADO.NET 之间创建一座桥梁。 如果我能让它工作,我会发布一个概念证明。


如何处理上下文。保存更改 http://msdn.microsoft.com/en-us/library/cc716714.aspx?

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

使用实体框架记录每个数据更改 的相关文章

  • 有没有办法替代Android中的标准Log?

    有没有办法以某种方式拦截对 android 中标准 Log 的调用并执行其他操作 在桌面 Java 中 人们通常会得到一些记录器 因此有多种方法可以安装不同的日志处理程序 实现 但是 Android似乎对Log有静态调用 我找不到任何有关替
  • 日志中的“时间”字段到底表示什么?

    我在一台存在一些性能问题的服务器上研究了 IIS 7 5 中的 W3C 格式日志文件一段时间 在我看来 与MSDN 文档 http technet microsoft com en us library cc754702 28WS 10 2
  • OWIN 可以替代 ASP.NET MVC 应用程序中的 DI 吗?

    大约一年前 在 Visual Studio 中创建时自动生成的 MVC 项目不包含任何有关 OWIN 的内容 作为再次申请并试图了解这些变化的人 我想知道 OWIN 是否可以替代我的 DI 据我了解 Startup Auth cs 中的以下
  • 实体框架:从模型生成数据库从模型存储中删除存储过程

    我正在使用带有 EF 4 模型的存储过程 为了实现这一目标 我将执行以下步骤 我通过从数据库更新并选择它来将存储过程添加到我的模型存储中 添加了函数导入以指向存储过程 存储过程返回连接多个表等的查询结果 因此在 返回集合 我指定的区域复合型
  • logback的“谨慎模式”是如何实现的?

    The 审慎模式 http logback qos ch manual appenders html prudentlogback 中的序列化所有 JVM 之间的 IO 操作 写入同一文件 可能运行在不同的主机上 在其他日志记录框架中 如果
  • 简单的 Linq 查询对同一个表有重复的连接?

    来自 Julia Lerman 的新实体框架书中的示例 我有一个包含两个表的数据库 联系人和地址 Contact 表有一个 ContactID int 以及名字 姓氏等 Address 表有一个 ContactID 以及城市 州 邮政编码等
  • Heroku Rails 应用程序级别不记录日志

    我在 Heroku 上有一个 Rails 应用程序 它没有在应用程序级别进行日志记录 当前版本 红宝石1 9 3 导轨3 1 3 在 config environment development rb 中有以下几行 config logge
  • 仅具有存储过程的实体框架

    我对在我们的场景中仅使用实体框架与存储过程的合理性有疑问 我们计划拥有一个 N 层架构 包括 UI BusinessLayer BLL DataAccessLayer DAL 和 BusinessObjectDefinitions BOD
  • 实体框架 4 DB 优先依赖注入?

    我更喜欢创建自己的数据库 设置索引 唯一约束等 使用 edmx 实体框架设计器 从数据库生成域模型是轻而易举的事 现在我有兴趣使用依赖注入来设置一些存储库 我查看了 StackOverflow 上的一些文章和帖子 似乎重点关注代码优先方法
  • 运行更新数据库时出错

    我在运行时遇到以下错误Update Database Verbose 使用启动项目 WebApplication 使用 NuGet 项目 Web应用程序 指定 Verbose 标志来查看 SQL 应用于目标数据库的语句 目标数据库是 星冰乐
  • 在c#中映射两个类

    我有两节课 public class foo1 public int id public string image link public string sale price and public class foo2 public int
  • 缺少 EF ObjectContext.SaveChanges

    我正在一个新项目中使用实体框架 我从一年前就开始使用 EF 今天 我尝试使用 Visual Studio 2008 SP1 和 2010 生成实体数据模型 它正在生成对象上下文属性和实体集 但尚未生成 SaveChanges 方法 我什至尝
  • 使用实体框架从 2 个表返回数据

    我正在使用 MVC3 和实体框架 但我需要来自不同表的更多数据 通常我会做这样的事情来从表中获取数据 Table Users id username 在代码中我会做这样的事情来获取所有用户 public static IEnumerable
  • 从客户端访问 DomainService 中的自定义对象

    我正在使用域服务从 Silverlight 客户端的数据库中获取数据 在DomainService1 cs中 我添加了以下内容 EnableClientAccess public class Product public int produ
  • 如何手动发送django异常日志?

    我的应用程序中有一个应该返回的特定视图HttpResponse 如果一切都成功完成并且类似HttpResponseBadRequest 否则 此视图适用于外部数据 因此可能会引发一些意外的异常 我当然需要知道发生了什么 所以我有这样的东西
  • 实体框架中的“it”是什么

    如果以前有人问过这个问题 请原谅我 但我的任何搜索中都没有出现 它 我有两个数据库表 Person 和 Employee 对每个类型的表进行建模 例如 Employee is a Person 在我的 edmx 设计器中 我定义了一个实体
  • 在远程 Glassfish 上进行日志记录和/或调试

    我有个问题 我在远程 Glassfish 实例上部署了一个 Web 服务 现在我需要一些简单的日志或调试系统来纠正我的代码 使用简单的打印会更好 我的想法是使用 glassfish 日志文件 因为我可以从管理 GUI 访问它 但它不起作用
  • 我可以将 MongoDB 与实体框架一起使用吗?

    实体框架有可能支持MongoDB数据库吗 有人写过实体框架MongoDB Provider吗 简短的回答 不 这肯定是可能的 但不合理 MongoDB 是文档数据库 不支持集合之间的任何物理关系 EF 非常适合 SQL MySQL 等关系数
  • 在 Spring Boot Actuator 健康检查 API 中启用日志记录

    我正在使用 Spring boot Actuator APIproject https imobilenumbertracker com 拥有一个健康检查端点 并通过以下方式启用它 management endpoints web base
  • 混合模型优先和代码优先

    我们使用模型优先方法创建了一个 Web 应用程序 一名新开发人员进入该项目 并使用代码优先方法 使用数据库文件 创建了一个新的自定义模型 这 这是代码第一个数据库上下文 namespace WVITDB DAL public class D

随机推荐

  • DataGridView 的 CellValueChanged 与 CellValidating 事件

    为 DataGridView 实现验证逻辑代码和条件格式代码的最佳位置是什么 在我读过的许多关于该控件的书籍和文章中 似乎表明处理该控件的适当事件是 CellValidating 事件 嗯 这个名字不仅仅意味着这一点 然而 根据我的口味 此
  • 为什么 PHP 中的函数 levenshtein 有 255 个字符的限制?

    有谁知道为什么这个功能编辑 http php net manual en function levenshtein phpPHP 有 255 个字符的限制吗 这是该函数的 PHP 完整实现 正如您所看到的 有基于字符串字符长度的嵌套循环 f
  • 如何用c++发一副牌

    我的要求如下 int Deal int CardSet CardSet 将两只手分成两手CardSet争论通过了 每手牌的数量是第一个参数 应一次从当前组中取出一张牌 将牌置于交替手中 例如 如果当前集合保持2S 3S 4S 5S 6S 7
  • 具有管理员权限的 Windows 窗体启动

    我有一个 Windows 窗体应用程序 需要管理员权限才能运行 为此 我使用以下代码
  • 在Lua中,处理包含nil的可变参数的正确方法是什么?

    我正在尝试创建一个调试打印函数 它将文件句柄作为第一个参数 首先 我写一个这样的函数 function fprint f for i v in ipairs do f write tostring v f write t end f wri
  • Docker 守护进程未运行

    这方面的新手 我已经在我的 Windows PC 上安装了新版本的 Docker 我使用的是 Windows 10 专业版 我已经尝试了非常基本的 docker 命令 但它不起作用 我还以管理员身份运行 docker 总是出现以下错误 do
  • 使用 Watir-Webdriver 时 Chrome 中的默认配置文件名称?

    我下载了 Chromedriver 然后将其解压到正确的位置 usr bin 但我不知道 Chrome Chromium 浏览器的默认配置文件名称是什么 因此此行抛出错误消息 browser Watir Browser new chrome
  • 在 RMarkdown 中使用图像作为表格?

    我知道我想做的事情听起来很愚蠢 但请耐心等待 我想将表格的现有图像 PNG 插入到将转换为 pdf 的 RMarkdown 文档中 有什么办法可以做到这一点并获得图像被视为一张桌子用于编号目的 也就是说 显然我可以做 A caption f
  • realpath 函数的转换问题(C 编程)

    当我编译以下代码时 define POSIX C SOURCE 200112L define ISOC99 SOURCE define EXTENSIONS include
  • DalvikVM 上的 CLI 在 JNI 库上失败

    我需要在 Android 上运行 java 应用程序的命令行版本 是的 我知道这并不简单 我尝试使用 Dalvikvm 启动它 它实际上启动了 但后来我的代码失败了 因为它开始使用 android util log 并抛出此异常 java
  • 如何在 Apache 网站内托管 ASP.NET Core Web 应用程序?

    我有一个旧的php使用开发的应用程序Yii2框架托管在Centos路径上的服务器 var www html 该应用程序可在以下位置访问http somedomain com 我正在开发使用新的 API 项目ASP NET MVC Core需
  • 在 IntelliJ IDEA 中运行时出现 java.lang.ClassNotFoundException

    我创建一个使用数据库的程序 在 IntelliJ IDEA 中编译时出现以下错误 有人知道为什么会发生这种情况以及我该如何解决它吗 您收到的错误不是在编译时发生的 而是在您尝试运行应用程序时发生的 发生这种情况是因为 Java 无法找到Ta
  • Bash 脚本:无法正确处理 SIGTSTP

    我有一个 bash 脚本 用于安装和卸载设备 并在其间执行一些读取操作 由于设备速度非常慢 因此脚本大约需要 15 秒才能完成 安装至少需要 5 6 秒 由于安装此设备可能会导致其他问题 因此我不希望此脚本被中断 话虽如此 我可以正确处理
  • Vue3“在‘vue-router’中找不到导出‘createWebHistory,createRouter’

    我正在创建一个 Vue3 应用程序 添加路由器后 我的第一页正在加载 但它完全是空白的 我收到以下信息 错误 未捕获类型错误 对象 不是函数 在控制台中 src router index js 中出现警告 未找到导出 createRoute
  • “System.Runtime.Serialization.IExtensibleDataObject”在程序集中定义

    我创建了一个服务 在调用它并执行它时出现以下错误 有人告诉我这个错误是什么 类型 System Runtime Serialization IExtensibleDataObject 是 在未引用的程序集中定义 您必须添加一个 引用程序集
  • Puppeteer 无法获得完整的源代码

    我正在使用 Node js 创建一个简单的抓取应用程序傀儡师 https github com GoogleChrome puppeteer 我想要抓取的页面是 下面是我现在正在使用的代码 const url https www betre
  • 如何比较两个 std::istream 引用?

    我正在将编译器从 GCC 切换到 Clang LLVM 并遇到了我以前没有遇到过的编译错误 我有一堂课看起来像这样 include
  • minikube:无法连接本地部署的 nginx 服务

    我已经在我的 ubuntu 16 04 机器上安装了 minikube 并启动了一个集群 并显示一条消息 Kubernetes is available at https 192 168 99 100 443 接下来 我使用以下命令部署了
  • 如何使用 spacy 或 nltk 检索句子的主要意图?

    我有一个用例 我想使用 spacy 或 nltk 或任何 NLP 库提取句子的主要有意义部分 例句1 我怎样才能发出反对骚扰的声音 意图是 大声疾呼反对骚扰 例句2 唐老鸭是由哪个漫画家 哪个人 谁创作的 意图是 唐老鸭是由 创造的 例句3
  • 使用实体框架记录每个数据更改

    客户需要将每个数据更改与进行修改的实际用户一起记录到日志表中 该应用程序使用一个 SQL 用户来访问数据库 但我们需要记录 真实 用户 ID 我们可以在 t sql 中通过为每个表插入和更新编写触发器并使用 context info 来存储