使用继承的DbContext时未保存更改

时间:2011-11-16 16:37:49

标签: silverlight entity-framework-4.1 wcf-ria-services

我在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 个答案:

答案 0 :(得分:1)

由于您没有按照设计工作方式使用DomainService,因此您可能会发现它做了几件奇怪的事情。 DbContext.SaveChanges永远不应该被你的代码调用,在变更集中的所有CUD方法都被处理之后,它将由PersistChangeset方法中的DomainService调用。

DomainService持有的DbContext有几个属性已更改。 ProxyCreationEnabled,ValidateOnSaveEnabled,AutoDetectChangesEnabled和LazyLoadingEnabled都设置为false。在您的情况下,由于AutoDetectChangesEnabled设置为false,只更改person.Name不会触发DbContext以知道person.Name有任何更改。