SubmitChanges()不更新数据库

时间:2019-07-18 07:31:41

标签: c# linq

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

    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()}");
        }
    }

1 个答案:

答案 0 :(得分:-1)

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

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

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

执行SaveChanges()方法时,所有对象都将被修改。