【问题标题】:SubmitChanges() not updating the databaseSubmitChanges() 不更新数据库
【发布时间】:2019-07-18 16:41:34
【问题描述】:

我是 ADO.NET 的老手,但对 linq 很陌生。我编写了以下函数来将数据库中的一列 int 更改为新值。查询部分工作正常,但在我更新数据库中的 KeyStates 之后似乎不起作用。没有什么变化。没有错误,也没有更新。

    public static void UpdateKeySetToDatabase(IChangeTrackableAsSet set, 
        int tableId, State newState)
    {
        try
        {
            using (var c = new SqlConnection(ConnectionString.ConnectionString))
            {
                c.Open();

                List<int> keyList = set.trackedKeys.Select(k => k.KeyId).ToList();

                DataContext dc = new DataContext(c);                      
                Table<TrackedKey> tableKeys = dc.GetTable<TrackedKey>();

                var KeyStates =
                    from k in tableKeys
                    where (keyList.Contains(k.KeyId) && k.TableId == tableId)
                    select k;


                foreach (var k in KeyStates)
                {

                    EventHandling.Logging.CreateTextEvent($"Key {k.ShowKeyAsJson()}");
                    k.StatusOfKey = (int)newState;
                    EventHandling.Logging.CreateTextEvent($"New Key {k.ShowKeyAsJson()}");
                };

                tableKeys.Context.SubmitChanges();

            }
        }
        catch (Exception ex)
        {
            EventHandling.Logging.CreateTextEvent($"linq error {ex.ToString()}");
        }
    }

【问题讨论】:

  • 不是 dc 您应该调用提交更改的数据上下文吗?这应该是我认为的工作单元容器。
  • 感谢 Dbuggy,我很确定我也尝试过这种方法,结果相同。我试过 dc.SubmitChanges();仍然没有更新。我显然错过了一些简单的东西:/
  • 您是否看到正在进行更新?日志说明了什么?
  • 题外话,你为什么要打开连接?上下文不应该需要它。在主题上,您不应该使用 DataContext 类本身。您应该使用 Visual Studio 设计器创建一个映射到数据库表的继承类。
  • 看到你的困境,也在下面的 cmets 中,我会坚持使用 ADO.Net 来完成这样一个简单的任务。如果您正在做更多的数据库处理,您真的应该考虑深入研究实体框架。 LINQ-to-SQL 已弃用。

标签: c# linq


【解决方案1】:

我认为您应该向实体框架上下文指定实体已更改,以便对其进行更新。

...
k.StatusOfKey = (int)newState;
EventHandling.Logging.CreateTextEvent($"New Key {k.ShowKeyAsJson()}");

dc.Entry(k).State = EntityState.Modified;
...

当你执行 SaveChanges() 方法时,你所有的对象都会被修改。

【讨论】:

  • 我试过这个例子,但我得到 DataContext 不包含条目的定义。以及名称 EntityState 在上下文中不存在。
  • 您使用的是什么版本的 EF?它是 EF 核心吗?我的答案是 EF 5。EF Core 是不同的
  • 据我所知,我没有使用 EF。我只是在使用 LINQ。我猜如果我想从 linq 查询的结果中更新,我需要以某种方式合并 EF? :( 该死。我真的不想将 EF 添加为这个项目的一部分。希望单独使用 Linq 的灵活性。
猜你喜欢
  • 1970-01-01
  • 2023-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多