// goal: update Address record identified by "id", with new data in "colVal" string cstr = ConnectionApi.GetSqlConnectionString("SwDb"); // get connection str using (DataContext db = new DataContext(cstr)) { Address addr = (from a in db.GetTable () where a.Id == id select a).Single(); addr.AddressLine1 = colValue.Trim(); db.SubmitChanges(); // this seems to have no effect!!! } 在调试器中,addr具有db表中的所有当前值,并且我可以在调用db.SubmitChanges()之前验证AddressLine1是否已更改。执行SubmitChanges行时,SQL Profiler仅显示“重置连接”。任何人都知道为什么这不起作用?谢谢!
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
根据您提供的代码片段,看起来您正在使用LINQ to SQL来与数据库交互并尝试更新Address
表中的一条记录。您遇到的问题是调用db.SubmitChanges()
后,更改没有实际反映到数据库中,且SQL Profiler仅显示“重置连接”。
这里有几个可能的原因和相应的解决建议:
事务配置问题:在某些情况下,DataContext的事务设置可能导致提交不生效。虽然默认情况下DataContext应该能正确管理事务,但您可以显式地在一个事务中执行操作以确保提交逻辑:
using (var transaction = db.Connection.BeginTransaction())
{
try
{
// 您的更新逻辑
Address addr = (from a in db.GetTable<Addresses>() where a.Id == id select a).Single();
addr.AddressLine1 = colValue.Trim();
db.SubmitChanges();
transaction.Commit();
}
catch
{
transaction.Rollback();
throw;
}
}
数据库上下文生命周期问题:确保DataContext实例在执行整个查询和提交更改的过程中都是有效的。您的代码看起来已经正确处理了这一点,但在更复杂的场景中,如果DataContext过早被释放或重新创建,可能会导致问题。
数据库权限问题:确认用于连接数据库的用户具有足够的权限来修改Address
表的数据。如果权限不足,更新操作会被数据库拒绝,但通常这会抛出异常而不是静默失败。
SQL Server触发器影响:检查数据库中是否有针对Address
表的触发器,这些触发器可能会在数据更新时进行额外的操作,甚至回滚事务。
日志查看:除了SQL Profiler之外,检查数据库的日志文件,看是否有关于这个更新操作的错误信息或者警告。
模型映射问题:确认LINQ to SQL的映射(DBML文件或代码中的映射)正确无误,特别是对于Address
实体及其属性的映射。
如果以上建议都不能解决问题,建议您通过调试进一步深入,比如检查db.ChangeConflicts
属性看是否有冲突,或者启用更详细的日志记录来捕获潜在的错误信息。