LINQ to SQL公共基类
2008-09-04 10:02:00 来源:WEB开发网虽然移除了实体间的关系,但却不用担心最终结果的正确性。Attach方法只负责将实体与DataContext的一个新实例进行关联,并跟踪实体的变化。在提交修改时,DataContext会检查映射的数据库中实际的值,然后再根据传递进来的实体更新或删除记录。特别的,我们需要在数据库中设置级联的Action,如图2所示:
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.
更多精彩
赞助商链接