簡體   English   中英

我可以同時通過同一個DataContext對象訪問多個表嗎?

[英]Can I access more than one table via the same DataContext object simultaneously?

假設我有一個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對象。

這種用法合法嗎? 我應該期待這種方法有什么問題嗎?

只有在數據庫引擎中支持多個活動記錄集(MARS)時 ,這才有效 如果沒有,您將生成異常。 否則,你絕對可以做到這一點。

如果您沒有MARS支持,則需要使用.AsEnumerable一次從數據庫下載所有記錄並轉換為內存可枚舉。

這是關於實體框架中使用MARS的內容的另一個很好的資源 ,以及如果沒有它,你不能做什么。

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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM