Вставить или обновить с помощью LINQ to Entity - PullRequest
1 голос
/ 19 декабря 2011

Я пытаюсь использовать Linq to Entity в качестве моего DAL для нового проекта.

В моем DAL у меня есть этот метод, чтобы получить вакансию

    public Job LoadJob(int id)
    {
        Job job = new Job();

        using (TNEntities context = new TNEntities())
        {
            var jobEntity = (from c in context.Jobs
                      where c.id == id
                      select c).First();

            job = (Job)jobEntity;                
        }

        return job;
    }

Я использую сущность Job в моей программе и затем хочу сохранить ее:

Я пробовал несколько разных вещей, но мой метод выглядит следующим образом (он не работает)

    public void SaveJob(Job job)
    {
        using (TNEntities context = new TNEntities())
        {
            context.Jobs.AddObject(job);
            context.SaveChanges();
        }
    }

Я пробовал context.jobs.attach (job), который не выдает ошибку, но не обновляет мою Job. Я предполагаю, что это потому, что задание находится вне контекста, поскольку выходит за рамки контекста использования. Но я не уверен, как повторно прикрепить его, чтобы он обновлял работу, которую я выбрал в своем первом методе.

Ответы [ 2 ]

0 голосов
/ 19 декабря 2011

Я бы посоветовал вам оставить свойство в вашем application.xaml.cs наподобие

public TNEntities context {get; private set;}

, чьи TNEntities инициализируются при запуске. Это сделает вашу жизнь проще.

0 голосов
/ 19 декабря 2011

В идеале вы хотите прочитать свою работу из контекста, внести изменения, а затем вызвать SaveChanges для того же контекста , из которого вы изначально читали. Может быть (должно) быть возможно прикрепить измененную сущность к новому контексту и установить ее статус на измененную, но я обнаружил, что модифицированные дочерние объекты плохо обрабатываются с этим подходом.

Один из более простых подходов состоит в том, чтобы все эти операции выполнялись в объекте DataAccess, который имеет один экземпляр вашего контекста TNEntities, и использует его для чтения вашей сущности задания и сохранения изменений.

public class JobDao : IDisposable {

    TNEntities context = new TNEntities();

    public Job LoadJob(int id)
    {
       return this.context.Jobs.First(c => c.id == id);
    }

    public void Save(){
       this.context.SaveChanges();
    }

    public void Dispose(){
        this.Context.Dispose();
    }
}

(конечно, вы захотите поместить большую часть этого стандартного кода в базовый класс)

* * 1010
...