linq C# EntityFrameWork错误“不能在单个查询执行中使用多个上下文示例”

idfiyjo8  于 2022-12-06  发布在  C#
关注(0)|答案(1)|浏览(198)

我是C#和EntityFramework的初学者,如果我的英语不好,请原谅。
我想通过LinQ到实体在一个查询中连接两个表(OPE_TABLE,CLASS_TABLE)。当我从查询中删除join-CLASS_TABLE时,我能够确认该数据。
添加join-CLASS_TABLE,然后我收到“不能在单个查询执行中使用多个上下文示例。请确保查询使用单个上下文示例”。我不知道这是什么意思。我知道OPE_TABLE被视为一个表,因为它是自联接的。
OPE_TABLE和CLASS_TABLE上下文定义在不同的文件中。是否可以在单个查询中使用多个上下文来检索数据?
这是理想的。

SELECT T2.OPECD
     , T2.OPENM
  FROM OPE_TABLE T1
  LEFT JOIN OPE_TABLE T2
    ON T2.CLAID = T1.CLAID
   AND T2.CLBID = T1.CLBID
   AND T2.POSITIONID IN ('00001', '00002', '00003')
   AND T2.DELETEKB = '1'
    OR T2.OPECD = T1.OPECD
  LEFT JOIN CLASS_TABLE CL
    ON CL.CLASSID = T2.CLASSID
   AND CL.CLASSKB = '6'
 WHERE T1.TANCD = :arg_CD  
 ORDER BY CASE WHEN T1.OPECD = T2.OPECD THEN 0 ELSE 1 END
     , CL.OPEID
     , T2.OPENM

代码如下。谢谢。

namespace Inf.Operator
{
    public class EFoperatorRepository
    {
        private readonly operatorContext _context;
        private readonly classContext _classContext;

        public EFoperatorRepository(operatorContext context, classContext classContext)
        {
            _context = context;
            _classContext = classContext;
        }

        public IEnumerable<Operator> FindIdAndNm(string arg_CD)
        {
            var list = new List<string> { "00001", "00002", "00003" };

            var query = (from t1 in _context.OPE_TABLE
                         where t1.operatorId.Equals(arg_CD)
                         join t2 in _context.OPE_TABLE
                            on new { t1.departmentId, t1.teamId }
                            equals new { t2.departmentId, t2.teamId } into ts
                         from tsResult in ts.DefaultIfEmpty()
                         where list.Contains(tsResult.positionId)
                            && tsResult.deletekb.Equals("1")
                            || tsResult.opeCd.Equals(t1.opeCd)
                            
                         // ★↓If this is removed, data can be acquired.
               //    However, if you include it, an error occurs.
                         join cl in _classContext.CLASS_TABLE
                          on tsResult.groupId equals cl.classId
                         where cl.classKb.Equals("6")
                         // ★↑
                         
                         select new
                         {
                             tsResult.operatorCd,
                             tsResult.operatorNm
                         }
                         )ToList();

            foreach (var item in query)
            {
                Console.WriteLine(item);
            }
        }
    }
}
gg0vcinb

gg0vcinb1#

错误消息会告诉您问题的确切原因:在一个查询中使用两个上下文(_classContext_context),这是不可能的。
我假设您的两个上下文Map到不同的数据库,因此只需在“主”数据库上创建一个视图,从第二个数据库中提取数据并Map。

相关问题