【发布时间】: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 已弃用。