此時,我們需要將這個實體從業務層(BLL)傳遞到數據訪問層(DAL),當GetModel方法返回實體后會立即釋放掉DataContext,然后到了執行DAL.Update(Entity entity)方法時又重新實例化一個DataContext來進行更新操作;可見被傳遞的實體是從第一個DataContext傳遞到另一個DataContext,在LINQ TO SQL中這種跨越不同DataContext操作時,需要先進行附加操作,也就是context.Entity.Attach(entity,true); 最后再context.SubmitChanges();
還是看看代碼吧:
代碼 class BLL { PRivate readonly DAL dal = new DAL(); public LinqToSqlProvider.User GetModel(Expression<Func<LinqToSqlProvider.User, bool>> expression) { dal.GetModel(expression); } public void Update(LinqToSqlProvider.User entity) { dal.Update(entity); } }
class DAL {
public LinqToSqlProvider.User GetModel(Expression<Func<LinqToSqlProvider.User, bool>> expression) { LinqToSqlProvider.User entry = new CriTextBroadcast.LinqToSqlProvider.User(); using (CriTextBroadcastDBDataContext context = DataContext) { entry = context.User.SingleOrDefault(expression); } return entry; }
public void Update(LinqToSqlProvider.User entity) { using (CriTextBroadcastDBDataContext context = DataContext) { context.User.Attach(entry, true); context.SubmitChanges(); } } }