Как мне поместить 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 шт):
Никак.
Вы смешиваете две технологии: Entity Framework (верхняя строка DataContext), в котором используется описание схемы базы данных в миграциях и/или коде и ADO, в котором вы пишете plain sql запросы. И это не просто смешение, а попытка воткнуть треугольный штекер в круглый разъём: оно не предназначено для этого и вероятно просто сломается, т.к. слишком разнородное.
Гипотетически, может быть и можно хитрым способом подменить знатную часть EF'а собственными штуками, но это будет такой костыль и грубый хак, что лучше не стоит пытаться усидеть на двух стульях: у вас либо структура базы описана в строгих классах (EF) либо заранее неизвестна (ADO). Не знаю, сколько тысяч человеко-часов вложила майкрософт в EF, но если вы хотите переизобрести EF - ну, попробуйте.
Но попытки вероятно потребуют немало человеко-часов от вас и будет падать при малейшем обновлении пакетов (кстати, вы не указали - у вас EF или EF Core, но в принципе, разницы особой нет), а также сбоить в каких-то неожиданных сценариях типа обновления detached сущностей.
И да, если вы видели методы .Add() и .Attach() у DbSet — они не делают то, что вам нужно, это для другого.