使用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); } }
读
-
LINQ to SQL:“UpdateCheck = Never”时不刷新更新
-
Linq To SQL附加/刷新实体对象
-
LINQ-to-SQL表 .Attach做什么?
-
为什么我应该在LINQ To SQL存储库保存方法中使用GetOriginalEntityState()?
-
如何拒绝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(); }