使用Attach方法无法更新数据库

我正在尝试学习LINQ to SQL。 我已经成功实现了insert方法,并且数据被插入到数据库中。 当我尝试更新现有数据时,即使没有exception,它也不会反映在数据库中。 你能否说一下可能出错的地方?

注意:AccountNumber是主键

编辑

以下代码行使其工作。 但是,你能解释为什么我们需要刷新吗?

accountRepository.UpdateChangesByAttach(acc1); accountRepository.RefreshEntity(acc1); accountRepository.SubmitChanges(); 

注意:

 DataContext.Refresh method refreshes object state by using data in the database. 

刷新是使用KeepCurrentValues选项完成的。 据我所知,它将保留我在实体对象中更新的值。 我(仅)提供需要在数据库中更新的所需信息。 是否需要刷新才能获得剩余的列值?

客户

 using (var context = new RepositoryLayer.LibraryManagementClassesDataContext(connectionstring)) { context.Log = Console.Out; RepositoryLayer.Repository selectedRepository = new RepositoryLayer.Repository(); //selectedRepository.Context = context; AccountBusiness accountBl = new AccountBusiness(selectedRepository); //Transaction 1 //List accountList = accountBl.GetAllAccounts(); //Transaction 2 //accountBl.InsertAccounts(); //Transaction3 accountBl.UpdateAccounts(); } 

业务层

  public void InsertAccounts() { RepositoryLayer.Account acc1 = new RepositoryLayer.Account(); acc1.AccountNumber = 4; acc1.AccountType = "Contract"; acc1.Duration = 6; accountRepository.InsertOnSubmit(acc1); accountRepository.SubmitChanges(); } public void UpdateAccounts() { RepositoryLayer.Account acc1 = new RepositoryLayer.Account(); acc1.AccountNumber = 4; acc1.AccountType = "TEST"; acc1.Duration = 10; accountRepository.UpdateChangesByAttach(acc1); accountRepository.SubmitChanges(); } 

知识库

 public class Repository : IRepository where T : class { public System.Data.Linq.DataContext Context { get; set; } public virtual System.Data.Linq.ITable GetTable() { return Context.GetTable(); } public virtual void InsertOnSubmit(T entity) { GetTable().InsertOnSubmit(entity); } public virtual void UpdateChangesByAttach(T entity) { GetTable().Attach(entity); } public virtual void SubmitChanges() { Context.SubmitChanges(); } public virtual void RefreshEntity(T entity) { Context.Refresh(System.Data.Linq.RefreshMode.KeepCurrentValues, entity); } } 

  1. LINQ to SQL:“UpdateCheck = Never”时不刷新更新

  2. Linq To SQL附加/刷新实体对象

  3. LINQ-to-SQL表 .Attach做什么?

  4. 为什么我应该在LINQ To SQL存储库保存方法中使用GetOriginalEntityState()?

  5. 如何拒绝Linq to SQL的DataContext中的所有更改?

这可以通过以下问题解决:LINQ to SQL问题:在“UpdateCheck = Never”时更新而不刷新 。

这不使用Refresh,并且在update语句之前没有select语句。

我按照以下方式开展工作。 但我仍然想知道为什么我们需要刷新才能工作。 你能解释一下吗?

在存储库中添加了function

  public virtual void RefreshEntity(T entity) { Context.Refresh(System.Data.Linq.RefreshMode.KeepCurrentValues, entity); } 

呼叫已更改为

  public void UpdateAccounts() { RepositoryLayer.Account acc1 = new RepositoryLayer.Account(); acc1.AccountNumber = 4; acc1.AccountType = "TEST"; acc1.Duration = 10; accountRepository.UpdateChangesByAttach(acc1); accountRepository.RefreshEntity(acc1); accountRepository.SubmitChanges(); }