我可以同时通过同一个DataContext对象访问多个表吗?

时间:2012-12-19 12:11:34

标签: c# .net sql-server-2008 datacontext

假设我有一个DataContext对象并同时访问两个表:

using( var context = new DataContext( connectionString ) ) {
     foreach( firstTableEntry in context.GetTable<FirstTable>() ) {
         switch( firstTableEntry.Type ) {
         case RequiresSecondTableAccess:
         {
             var secondTable = context.GetTable<SecondTable>();
             var items = secondTable.Where( item => item.Id = firstTableEntry.SecondId );
             foreach( var item in items ) {
                handleItem( item );
             }
         }
         default:
           // not accessing the second table
     }
}

请注意,在对其他表进行查询时,我不会停止使用第一个查询结果,并且始终使用相同的DataContext对象。

此类使用是否合法?我应该期待这种方法有什么问题吗?

2 个答案:

答案 0 :(得分:3)

只有在数据库引擎中支持Multiple Active Recordsets (MARS)时才能使用此功能。如果没有,您将生成异常。否则,你绝对可以做到这一点。

如果您没有MARS支持,则需要使用.AsEnumerable一次从数据库下载所有记录并转换为内存可枚举。

以下是关于实体框架中使用MARS的内容的another great resource以及如果您没有使用MARS时无法执行的操作。

答案 1 :(得分:1)

AS评论大卫。我想补充一下他的信息...... 请参阅WEB.CONFIG,如下所示,连接字符串中的MARS = True

<connectionStrings>
<add name="ContextNameXYZ" connectionString="Data Source=ServerName;Initial Catalog=DBName;Integrated Security=True;MultipleActiveResultSets=True;App=EntityFramework"
   providerName="System.Data.SqlClient" />
  </connectionStrings>