asp.net - 在同一连接中,在实体框架命令之前执行 SQL 命令
问题描述
我有一个 ASP.NET MVC 应用程序首先通过 EF 代码访问现有数据库。该数据库来自一个已经存在的系统,我无法更改其结构或代码,只需插入记录即可。
所以我有一个DbContext
对象要保存到实体:
using (MyContext db = new MyContext())
{
MyEntity e = new MyEntity();
e.MyProperty = "value";
db.MyEntity.Add(e);
db.SaveChanges();
}
问题是该MyEntity
表有一个触发器,需要SET DATEFORMAT MDY
运行才能正常工作。
所以这就是我的问题:如何在调用SaveChanges
应用它生成的命令之前执行这个命令?我试过了
db.Database.ExecuteSqlCommand("set dateformat mdy");
但它没有用,它可能使用不同的连接。
如果可能,另一种选择是在连接字符串中设置此参数。
解决方案
正如@Laughing Vergil 所说,您可以在 DbContext 运行查询之前访问连接对象。如果您使用db.Database.Connection.Open()
EF6 或db.Database.OpenConnection()
EF Core,则连接将在 DbContext 的整个生命周期内保持打开状态。因此您可以设置连接属性,直接在连接上使用 ADO.NET 等。
您可以在 DbContext 构造函数中执行此操作以使其成为全局行为,或者针对特定方法,如下所示:
using (MyContext db = new MyContext())
{
db.Database.Connection.Open(); //EF6
//db.Database.OpenConnection(); //EF Core
db.Database.ExecuteSqlCommand("set dateformat mdy");
MyEntity e = new MyEntity();
e.MyProperty = "value";
db.MyEntity.Add(e);
db.SaveChanges();
}
推荐阅读
- sql-server - org.hibernate.exception.SQLGrammarException:将 nvarchar 值“ViewWebApp”转换为数据类型 int 时转换失败
- php - DateTime('now') 在 sleep() 之后未修改
- azure-active-directory - 迁移到 .net5 后的 Blazor webassembly azure 广告身份验证问题
- postgresql - 如何在 dbeaver 中为 Postgresql 配置主客户端
- python - 在花园 Python 练习中放置 gnome
- javascript - 将用户点击推送到数组,然后在 Javascript 中设置时间后显示数组?
- python - 如何让我的鼠标左键在 tkinter、python 的棋盘井字游戏中画一个圆圈
- flutter - 在 Flutter 中制作唯一 ID 列表平铺
- javascript - ReferenceError: con 未定义
- excel - Excel VBA:将图片移动到另一张纸而不复制/粘贴