我是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()}");
}
}
答案 0 :(得分:-1)
我认为您应该向Entity Framework上下文指定该实体已更改,以便对其进行更新。
...
k.StatusOfKey = (int)newState;
EventHandling.Logging.CreateTextEvent($"New Key {k.ShowKeyAsJson()}");
dc.Entry(k).State = EntityState.Modified;
...
执行SaveChanges()方法时,所有对象都将被修改。