Изменения не сохраняются при использовании унаследованного DbContext - PullRequest
1 голос
/ 16 ноября 2011

Я использую слабосвязанную модель между моим клиентом Silverlight и моим DomainService.Я использую POCO с EF 4.1

Я не использую какие-либо леса, предлагаемые инструментами.

Класс DomainService объявлен как:

public partial class MyDomainService : DbDomainService<MyContext>
{
...
}

Метод обновления у меня следующий:

public UpdatePerson(PersonInfo source)
{
    var person = DbContext.People.Find(source.Id);
    person.Name = source.Name;
    DbContext.SaveChanges();
}

Но когда я проверяю базу данных вручную, изменение не сохраняется.Однако если я изменю код так, чтобы он выглядел следующим образом - все в порядке:

public UpdatePerson(PersonInfo source)
{
    using(var context = GetDbContext())
    {
        var person = context.People.Find(source.Id);
        person.Name = source.Name;
        context.SaveChanges();
    }
}

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

1 Ответ

1 голос
/ 16 ноября 2011

Поскольку вы не используете DomainService так, как он предназначен для работы, вы можете обнаружить, что он делает несколько странных вещей. DbContext.SaveChanges никогда не должен вызываться вашим кодом, он будет вызываться DomainService в методе PersistChangeset после обработки всех методов CUD в наборе изменений.

DbContext, который хранится в DomainService, имеет несколько измененных свойств. Для ProxyCreationEnabled, ValidateOnSaveEnabled, AutoDetectChangesEnabled и LazyLoadingEnabled установлены значения false. В вашем случае, поскольку AutoDetectChangesEnabled имеет значение false, просто измените person.Name не будет вызывать DbContext, чтобы знать, что есть какие-либо изменения в person.Name.

...