3

Я новичок в C#, linq и EF4, поэтому, пожалуйста, несите меня. Я уверен, что это действительно просто, но не видя этого.SELECT INTO с EF4

Хранимая процедура, которую я заменяю, выполняет SELECT INTO, чтобы запросить кучу данных, выполнить некоторые простые преобразования и затем выводить результаты в другую таблицу. Затем этот набор данных возвращается для локальной обработки в коде.

У меня есть запрос, который переносит мои данные в анонимный тип и обрабатывает все преобразования. Но как я могу отправить эти данные в таблицу результатов?

Первоначально я думал об использовании типа сущности для хранения моих первоначальных результатов. Но у меня есть дополнительные поля, которые мне нужны для локальной обработки, которые не будут храниться в таблице результатов.

Благодаря любым мастерам EF, которые хотят взломать это для меня!

редактировать: Вот некоторые псевдо код, основанный на помощь Morteza, но не похоже, чтобы переместить данные -

var ctx = new ReportEntities(); 
var query = from s in ctx.Source 
      select new 
      { 
       s.SourceID, 
       s.OtherStuff 
      }; 

query.ToList().Select(q => new Report() 
{ 
    SourceID = q.SourceID, 
    OtherStuff = q.OtherStuff 
}); 

ctx.SaveChanges(); 

ответ

1

На EF4 вы можете обновить модель с индивидуальными хранимыми процедурами и импортировать их в качестве функции. Я думаю, что самый простой способ - воспользоваться этой новой функцией и создать вторую процедуру, которая принимает данные результата как параметры и сохраняет их в таблице результатов. Таким образом, вы можете вызвать эту функцию после завершения обработки данных.

Update:

var ctx = new ReportEntities(); 
var query = (from s in ctx.Source select new { 
     s.SourceID, 
     s.OtherStuff}).ToList(); 

List<Report> reports = query.Select(q => new Report() 
{ 
    SourceID = q.SourceID, 
    OtherStuff = q.OtherStuff 
}).ToList(); 

// Now you need to add your new report objects to the Context: 
foreach(report in reports) { 
    ctx.Reports.AddObject(report); 
} 

// Now is the time to call the SaveChanges on ObjectContext: 
ctx.SaveChanges(); 
+0

Я думал об этом, и это будет достаточно легко. Вещь ... Я пытаюсь научиться делать что-то «новым» способом. Таким образом, я отказываюсь от хранимых процедур и стараюсь сохранить их в коде. Неужели я стараюсь сделать это так? –

+0

Ну, так как вы сказали, что «он выводит мои данные в анонимный тип», я понял, что у вас, вероятно, нет объекта EntityObject, сопоставленного с этой таблицей результатов, но если вы это сделаете, то вы можете наверняка заполнить его результатами и сохранить его в БД без использования хранимой процедуры. У вас есть такая организация в вашей модели? –

+0

Да, я проецируюсь на анонимный тип, потому что я возвращаю лишние поля не в таблицу результатов. Мне нужны дополнительные поля для некоторой локальной обработки позже в коде. И да, таблица результатов находится в моем EDM. –