微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

EF6 在声称已更新表时不更新表

如何解决EF6 在声称已更新表时不更新表

问题

Entity Framework 从数据库读取,然后错误地记录它已写回数据库。我首先尝试使用同步代码,然后使用异步代码。有什么想法吗?

背景

作为将我的 .NET 4.6.1 MVC 站点从 ADO.NET 迁移到 EF6 的第一步,我引用了同一系统中一个姊妹项目使用的 EF 库,并尝试读取记录、更新一个字段,并将记录保存回数据库。阅读没问题,但我对执行更新时发生的事情感到困惑。

对于有问题的情况,sql 字段在现有记录中以 null 开始,然后获取此单个更新以设置其值。

下面使用的记录器是使用 ADO.NET 的 Log4Net。它记录到同一个数据库,不同的表。

环境是本地 VS > 远程 IIS/sql Server,也是从 VS 发布的,所以一切都是远程 IIS Server 和 sql Server。

方法

using (var db = new EF_Entities())
{
    // Setup the logging.
    db.Database.Log = s => log.Debug(s);
    
    // Fetch record from sql (proven working)
    TheTableObject tto = db.TheTableObject.SingleOrDefault(x => x.Id == 1234567);

    // Update sql.
    if (tto != null)
    {
        tto.TheFieldSlashProperty = "A short string";
        await db.SaveChangesAsync();
    }
}

结果

读取的初始数据是正确的。 尽管日志说了什么,但数据写入不会发生。

db.SaveChangesAsync() 的记录输出是这样的:-

Opened connection asynchronously at 19/03/21 13:09:21 +00:00  
Started transaction at 19/03/21 13:09:22 +00:00  
UPDATE [dbo].[TheTableObject]  SET [TheFieldSlashProperty] = @0  WHERE ([Id] = @1)  
-- @0: 'A short string' (Type = String,Size = 50)  
-- @1: '1234567' (Type = Int32)  
-- Executing asynchronously at 19/03/21 13:09:23 +00:00  
-- Completed in 41 ms with result: 1  

Committed transaction at 19/03/21 13:09:25 +00:00  
Closed connection at 19/03/21 13:09:25 +00:00 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。