我在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();
}
}
我想我不介意创建自己的本地上下文变量,但我很好奇第一种方法不起作用的内容是什么。
答案 0 :(得分:1)
由于您没有按照设计工作方式使用DomainService,因此您可能会发现它做了几件奇怪的事情。 DbContext.SaveChanges永远不应该被你的代码调用,在变更集中的所有CUD方法都被处理之后,它将由PersistChangeset方法中的DomainService调用。
DomainService持有的DbContext有几个属性已更改。 ProxyCreationEnabled,ValidateOnSaveEnabled,AutoDetectChangesEnabled和LazyLoadingEnabled都设置为false。在您的情况下,由于AutoDetectChangesEnabled设置为false,只更改person.Name不会触发DbContext以知道person.Name有任何更改。