0

В настоящее время у меня немного беспорядок, пытаясь создать консольное приложение, где я могу вставить некоторые данные в свою базу данных и вывести sql в файл как дополнительный. Идея заключается в том, что я могу использовать их для переноса данных или чего-то подобного.Создание полезной sql из Entity Framework для использования при миграции данных

У меня есть несколько таблиц поиска, которые я хотел бы предварительно заполнить данными, и я думаю, что это лучше, чем писать sql вручную. Если кому-то нужно найти значение, оно будет прямо в коде.

Я использую EF Tracing и то, что у меня до сих пор позволяет мне войти рамки SQL субъект создает, выполнив следующие действия

Я замкнув в их действия, чтобы получить доступ к кальке

private void WriteSqlToString(CommandExecutionEventArgs args) 
{ 
    sqlTrace.Append(args.ToTraceString()); 
} 

Что дает что-то вроде этого

insert [dbo].[Members]([EmailAddress], [FirstName], [LastName]) 
values (@0, @1, @2) 
select [Id] 
from [dbo].[Members] 
where @@ROWCOUNT > 0 and [Id] = scope_identity() 
-- @0 (dbtype=String, size=60, direction=Input) = "[email protected]" 
-- @1 (dbtype=String, size=-1, direction=Input) = "TestFirstName" 
-- @2 (dbtype=String, size=-1, direction=Input) = "TestLastName" 

Я буду первым, чтобы держать меня за руку, потому что я не очень хорошо писать SQL вручную. Я немного перепутал с этим, чтобы попытаться выполнить его в sqlserver express, но продолжать получать ошибки, потому что переменные не объявлены.

Неужели люди думают, что стоит продолжать пытаться заставить это работать, или я не вижу лучшего решения здесь?


Вот еще немного кода для справки

public void CreateSqlFile() 
{ 
    using (MyContext context = tracingContextFactory.Create(WriteSqlToString)) 
    { 
     Migrate(context); 
     context.SaveChanges(); 
    } 

    StreamWriter file = new StreamWriter(migrationPath); 
    file.WriteLine(sqlTrace.ToString()); 
    file.Close(); 
} 
+0

Если вы хотите быть программистом, стоит потратить время, чтобы научиться писать sql. Я слышал хорошие вещи об этой книге, научите себя SQL за 10 минут. –

+0

Я знаю SQL на разумном уровне, но на повседневной основе я бы сказал, что я пишу, может, один раз каждые 6 месяцев.Это всего лишь случай ввода данных, поэтому почему бы не попробовать и написать программу, так что мне не нужно писать sql, а также проверить проверку компилятора и EF в встроенной проверке данных, предоставляемой приложением? Также добавлен бонус надлежащего intellisense. Но эй, если ручной ввод данных - это твоя вещь, то есть у нее. – Neil

ответ

1

SQL, полученные от EF функционален, но это, как правило, слишком сложны и плохо отформатирован.

Что хорошо, для EF, потому что никто никогда не видит SQL.

Однако, если вы собираетесь использовать или пытаться изменить SQL, я бы выбрал другой маршрут. Например, если вы пытаетесь выполнить миграцию данных, я бы посмотрел на службы интеграции SQL Server (SSIS).

Редактировать

Для получения данных для передачи между серверами, в студии управления сервера SQL,

  • правой кнопкой мыши на базе данных,
  • Нажмите создания сценариев.
  • Выберите свой стол.
  • На следующем экране выберите Дополнительные параметры
  • В разделе «Типы данных для сценария» выберите «Только данные». (или Схемы и данные, если необходимо)
  • Продолжить до конца мастера
  • Успех.
+0

Я действительно заинтересован в том, чтобы он был функциональным. Например, у меня есть таблица поиска, которая имеет 200 записей. Вместо того, чтобы вводить это в sql, я бы хотел определить, что в коде затем вывести sql в файл, который будет выполняться как часть моих миграций базы данных. Я сомневаюсь, что многие люди его прочтут. – Neil

+0

@Neil Ah. Затем см. Править выше. – podiluska

+0

Спасибо, это хорошее решение, просто стыдно, что он не может быть автоматизирован – Neil