У меня есть база данных SQL Server, в которой я храню данные из больших определенных файлов журналов (часто по 100 МБ и более), по одному на базу данных.После некоторого анализа база данных снова удаляется.
Из базы данных я создал как модель Entity Framework, так и модель DataSet через дизайнеров Visual Studio.DataSet предназначен только для массового импорта данных с SqlBulkCopy
после довольно сложного процесса анализа.Затем все запросы выполняются с использованием Entity Framework Model, метод CreateQuery
которого предоставляется через такой интерфейс
public IQueryable<TTarget> GetResults<TTarget>() where TTarget : EntityObject, new()
{
return this.Context.CreateQuery<TTarget>(typeof(TTarget).Name);
}
Теперь, иногда мои файлы очень маленькие, и в таком случае Я быхотел бы пропустить импорт в базу данных, но просто иметь представление данных в памяти, доступное как сущности.Идея состоит в том, чтобы создать DataSet, но вместо массового импорта, напрямую передать его в ObjectContext, который доступен через интерфейс.
Имеет ли это смысл?
Теперь вотчто я сделал для этого преобразования до сих пор: я перебираю все таблицы в DataSet, преобразую отдельные строки в сущности соответствующего типа и добавляю их в конкретизированный объект моего типизированного контекстного класса Entity, например,
MyEntities context = new MyEntities(); //create new in-memory context
///....
//get the item in the navigations table
MyDataSet.NavigationResultRow dataRow = ds.NavigationResult.First(); //here, a foreach would be necessary in a true-world scenario
NavigationResult entity = new NavigationResult
{
Direction = dataRow.Direction,
///...
NavigationResultID = dataRow.NavigationResultID
}; //convert to entities
context.AddToNavigationResult(entity); //add to entities
///....
Очень утомительная работа, так как мне нужно было бы создать конвертер для каждого типа моего объекта и выполнить итерации по каждой таблице в наборе данных, который у меня есть.Осторожно, если я когда-нибудь изменю свою модель базы данных ....
Кроме того, я обнаружил, что могу создать экземпляр MyEntities
, только если я предоставлю допустимую строку подключения к базе данных SQL Server.Поскольку я не хочу каждый раз писать в свою полноценную базу данных, это мешает моим намерениям.Я намерен иметь только некоторую базу данных прокси в памяти.
Могу ли я сделать проще? Есть ли какой-нибудь автоматизированный способ сделать такое преобразование, например, создание ObjectContext из объекта DataSet?
PS: я видел несколько вопросов о модульном тестировании, которые кажутся несколько связанными, ноне совсем точно.