Здесь проблема:
У меня есть 2 контекста данных, в которые я хотел бы присоединиться. Теперь я знаю, что LINQ не позволяет присоединяться из одного контекста к другому, и я знаю, что 2 возможных решения состоят в том, чтобы либо создать один datacontext, либо иметь 2 отдельных запроса (что я и делаю сейчас). Однако то, что я хотел бы сделать, это "имитировать" соединение.
Вот что я пробовал.
using (var _baseDataContext = Instance)
{
var query = from a in _baseDataContext.Account.ACCOUNTs
where a.STR_ACCOUNT_NUMBER.ToString() == accountID
join app in _baseDataContext.Account.APPLICATIONs on a.GUID_ACCOUNT_ID equals
app.GUID_ACCOUNT
join l in GetLoans() on app.GUID_APPLICATION equals l.GUID_APPLICATION
select l.GUID_LOAN;
return query.Count() > 0 ? query.First() : Guid.Empty;
}
private static IQueryable<LOAN> GetLoans()
{
using (var _baseDataContext = Instance)
{
return (from l in _baseDataContext.Loan.LOANs
select l).AsQueryable();
}
}
Во время выполнения я получаю
System.InvalidOperationException: запрос содержит ссылки на элементы, определенные в другом контексте данных.
EDIT:
Рабочее решение:
using (var _baseDataContext = Instance)
{
var query = from a in _baseDataContext.Account.ACCOUNTs
where a.STR_ACCOUNT_NUMBER.ToString() == accountID
join app in _baseDataContext.Account.APPLICATIONs on a.GUID_ACCOUNT_ID equals
app.GUID_ACCOUNT
join l in GetLoans() on app.GUID_APPLICATION equals l.GUID_APPLICATION
select l.GUID_LOAN;
return (query.Count() > 0) ? query.First() : Guid.Empty;
}
private static IEnumerable<LOAN> GetLoans()
{
using (var _baseDataContext = Instance)
{
return (from l in _baseDataContext.Loan.LOANs
select l).AsQueryable();
}
}