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

sha*_*oth 9 .net c# datacontext sql-server-2008

假设我有一个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
     }
}
Run Code Online (Sandbox Code Playgroud)

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

这种用法合法吗?我应该期待这种方法有什么问题吗?

Dav*_*fer 3

仅当您的数据库引擎支持多活动记录集 (MARS)时,此功能才有效。如果没有,您将生成异常。否则,你绝对可以做到这一点。

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

这是另一个很棒的资源,介绍实体框架中使用 MARS 的内容以及如果没有它就无法执行的操作。