9

假设我有一个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对象。

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

4

2 回答 2

3

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

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

这是关于 Entity Framework 中什么使用 MARS 以及如果没有它你不能做什么的另一个很好的资源。

于 2012-12-19T12:29:37.273 回答
1

正如大卫所评论的那样。我会添加到他的信息中...参见 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>
于 2012-12-19T13:24:32.947 回答