Как мне поместить DataSet в DataContext?

Вот мой DataContext:

DataContext dataContext = new DataContext(connectionString);

Вот мой DbSet:

DataSet ds = new DataSet(connectionString);
ds.Locale = CultureInfo.InvariantCulture;
using (IDbConnection db = new SqlConnection(connectionString))
{
   var List = db.Query<dynamic>("SELECT * FROM sys.objects WHERE type in (N'U')").ToList();
   foreach (dynamic Table in List)
   {
     DataTable dataTable = new DataTable(Table.name);
     var ListColumn = db.Query<dynamic>("SELECT * FROM INFORMATION_SCHEMA.COLUMNS").Where(b => b.TABLE_NAME == Table.name).ToList();
     foreach (dynamic el in ListColumn)
     {
        DataColumn dataColumn = new DataColumn();
        dataColumn.ColumnName = el.COLUMN_NAME;
        if (el.DATA_TYPE == "int")
        {
           dataColumn.DataType = typeof(int);
        }
        else if (el.DATA_TYPE == "nvarchar")
        {
           dataColumn.DataType = typeof(string);
        }
        dataTable.Columns.Add(dataColumn);
     }
     ds.Tables.Add(dataTable)
  }
}

Как мне поместить DataSet в DataContext?


Ответы (1 шт):

Автор решения: A K

Никак.

Вы смешиваете две технологии: Entity Framework (верхняя строка DataContext), в котором используется описание схемы базы данных в миграциях и/или коде и ADO, в котором вы пишете plain sql запросы. И это не просто смешение, а попытка воткнуть треугольный штекер в круглый разъём: оно не предназначено для этого и вероятно просто сломается, т.к. слишком разнородное.

Гипотетически, может быть и можно хитрым способом подменить знатную часть EF'а собственными штуками, но это будет такой костыль и грубый хак, что лучше не стоит пытаться усидеть на двух стульях: у вас либо структура базы описана в строгих классах (EF) либо заранее неизвестна (ADO). Не знаю, сколько тысяч человеко-часов вложила майкрософт в EF, но если вы хотите переизобрести EF - ну, попробуйте.

Но попытки вероятно потребуют немало человеко-часов от вас и будет падать при малейшем обновлении пакетов (кстати, вы не указали - у вас EF или EF Core, но в принципе, разницы особой нет), а также сбоить в каких-то неожиданных сценариях типа обновления detached сущностей.

И да, если вы видели методы .Add() и .Attach() у DbSet — они не делают то, что вам нужно, это для другого.

→ Ссылка