gpt4 book ai didi

sql-server - Entity Framework context.Database.ExecuteSqlCommand 不会将更改保存到数据库

转载 作者:行者123 更新时间:2023-12-04 13:21:35 35 4
gpt4 key购买 nike

我正在为我的 Web 应用程序使用 EF,但遇到了一个奇怪的错误。我正在尝试更新数据库中的记录,但即使 context.Database.ExecuteSqlCommand 调用返回 1,当我随后调用 context.SaveChanges() 时,它也会返回0 并且更改在数据库中不可见。

代码如下:

List<int> ids = new List<int> { 1, 2, 3 };

using (var context = new TestDbContext())
{
int rows=context.Database.ExecuteSqlCommand("UPDATE [Records] SET [ExampleFlag] = 1 WHERE Id in (@ids)",new SqlParameter("@ids",String.Join(",", ids)));
int rows2 = context.SaveChanges();
}

由于某种原因,在调试时,行数等于 1,但行数 2 等于 0。好像无法将更改提交到数据库。

关于可能导致此问题的任何想法?

最佳答案

这两种写入数据库的方式几乎是两个不同的世界。

像 Entity Framework 这样的对象关系映射器 (ORM) 的核心功能是保持对象模型(例如在 C# 中)和关系数据库模型彼此同步。因此它能够跟踪对象模型的变化并将这些变化写入数据库。

一些 ORM,作为一种礼貌,提供较低级别的 API 来与数据库交互。但是,这些函数不与 ORM 函数交互,反之亦然。

换句话说,无论 DbContext.Database.ExecuteSqlCommand 执行什么语句,EF 的更改跟踪器都完全忽略它。如果 C# 代码没有修改任何实体对象,则更改跟踪器无事可做。执行的SQL代码对跟踪的实体对象没有影响。

关于sql-server - Entity Framework context.Database.ExecuteSqlCommand 不会将更改保存到数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51560902/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com