WEB开发网
开发学院数据库MSSQL Server LINQ to SQL公共基类 阅读

LINQ to SQL公共基类

 2008-09-04 10:02:00 来源:WEB开发网   
核心提示: 虽然移除了实体间的关系,但却不用担心最终结果的正确性,LINQ to SQL公共基类(7),Attach方法只负责将实体与DataContext的一个新实例进行关联,并跟踪实体的变化,DataContext就会返回存储在内部缓存中的数据,而不是重新映射数据表中的列,在提交修改时,DataC

虽然移除了实体间的关系,但却不用担心最终结果的正确性。Attach方法只负责将实体与DataContext的一个新实例进行关联,并跟踪实体的变化。在提交修改时,DataContext会检查映射的数据库中实际的值,然后再根据传递进来的实体更新或删除记录。特别的,我们需要在数据库中设置级联的Action,如图2所示:

LINQ to SQL公共基类

Figure 2: Set the delete rule

如果没有action,在删除实体时,可能会抛出System.Data.SqlClient.SqlException异常,信息如下:

The DELETE statement conflicted with the REFERENCE constraint "FK_Orders_Employees". The conflict occurred in database "Northwind", table "dbo.Orders", column 'EmployeeID'.

或许,你已经注意到在每个方法中都调用了InitDataContext方法,实现如下:

  private TContext m_context = null;
  private TContext CreateContext()
  {
  return Activator.CreateInstance<TContext>() as TContext;
  }
  private void InitDataContext()
  {
  m_context = CreateContext();
  }

为何需要为每个方法创建一个DataContext实例?原因在于DataContext的缓存机制。如果创建了一个DataContext的新实例,然后通过它查询数据库的数据,再修改其值;假设使用同一个实例执行下一次查询,DataContext就会返回存储在内部缓存中的数据,而不是重新映射数据表中的列。更多信息,请参考Linq in Action.

上一页  2 3 4 5 6 7 8  下一页

Tags:LINQ to SQL

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接