ВЫБРАТЬ В С EF4 - PullRequest
       15

ВЫБРАТЬ В С EF4

3 голосов
/ 05 ноября 2010

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

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

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

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

Спасибо всем мастерам EF, которые хотят попробовать это для меня!

edit: Вот некоторый псевдокод, основанный на помощи Мортезы, но, похоже, он не перемещает данные -

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 Ответ

1 голос
/ 05 ноября 2010

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

Обновление:

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();
...