假设我有一个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
对象。
此类使用是否合法?我应该期待这种方法有什么问题吗?
答案 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>