Вам необходимо создать два контекста (Unit of Work), один для сервера Sql, а другой для PostgreSql.
После этого вам нужно создать один репозиторий для получения данных с сервера sql используя Unit of Work для Sql Server и то же самое для PostgreSql.
Создайте службу для вызова обоих репозиториев
, затем вызовите оба репозитория и получите данные, которые вам нужны для создания класс, который будет заполнен обоими возвратами из репозиториев
что-то вроде этого
SqlServer Repository
public class SqlRepository: ISqlRepository
{
private readonly ISqlUoW _uow;
public SqlRepository(ISqlUoW uow)
{
_uow = uow;
}
public async Task<EntityA> GetDataAsync()
{
return await _uow.Connection.QueryAsync<EntityA>("select field1,field2 FROM EntityA");
}
}
PostgreSql Repository
public class PGRepository: IPGRepository
{
private readonly IUoWPG _uow;
public PGRepository(IUoWPG uow)
{
_uow = uow;
}
public async Task<Entityb> GetDataAsync()
{
return await _uow.Connection.QueryAsync<EntityB>("select field1,field3 FROM EntityB");
}
}
класс данных сетки
public class GridData
{
public string Field1 { get; set; }
public string Field2 { get; set; }
public string Field3 { get; set; }
}
Сервис
public class GridService : IGridService
{
private readonly ISqlRepository _sqlRepository;
private readonly IPGRepository _pgRepository;
public GridService(ISqlRepository sqlRepository, IPGRepository pgRepository)
{
_sqlRepository = sqlRepository;
_pgRepository = pgRepository;
}
public async Task<IList<GridData>> GetGridData()
{
var sqlData = await _sqlRepository.GetDataAsync();
var pgData = await _pgRepository.GetDataAsync();
var gridData = from sql in sqlData
join pg in pgData on sql.Field1 equals pg.Field1
select new GridData()
{
Field1 = sql.Field1,
Field2 = sql.Field2,
Field3 = pg.Field3
};
return gridData;
}
}
в этом сценарии общий ключ между таблицами является свойством Поле1
надеюсь, это поможет