1
我想我可以用我的DbContext与我有任何MVC应用程序中使用它的DomainService用同样的方法:EF4代码只+ RIA服务
public class DatabaseContext : DbContext
{
public DbSet<User> Users { get; set; }
}
public class UserDomainService : DomainService
{
private DatabaseContext db;
public UserDomainService()
{
db = new DatabaseContext();
}
public IQueryable<User> GetUsers()
{
return db.Users;
}
public void UpdateUser(User user)
{
db.Users.Attach(user);
}
public void DeleteUser(User user)
{
db.Users.Remove(user);
}
}
的是,虽然查询的作品,删除和更新操作会抛出异常:
“该对象无法删除,因为它在ObjectStateManager中找不到。”
更新:解决方案
所以这就是我最终做的。仍然不确定这是否是正确的方法:
public class DatabaseContext : DbContext
{
public DbSet<User> Users { get; set; }
public new Context ObjectContext { get { return base.ObjectContext; } }
}
public class UserDomainService : DomainService
{
private DatabaseContext db;
public UserDomainService()
{
db = new DatabaseContext();
}
public override bool Submit(ChangeSet changeSet)
{
bool submitResult = false;
try
{
submitResult = base.Submit(changeSet);
db.SaveChanges();
}
catch
{
}
return submitResult;
}
public IQueryable<User> GetUsers()
{
return db.Users;
}
public void UpdateUser(User user)
{
db.Users.Attach(user);
var stateEntry = db.Context.ObjectStateManager
.GetObjectStateEntry(entity);
foreach (var propertyName in stateEntry.CurrentValues
.DataRecordInfo.FieldMetadata
.Select(fm => fm.FieldType.Name))
{
stateEntry.SetModifiedProperty(propertyName);
}
}
public void DeleteUser(User user)
{
db.Users.Attach(user);
db.Users.Remove(user);
}
}
问题是我的用户是一个POCO类而不是一个EntityObject,所以它不知道EntityState。 – 2010-11-17 11:18:10
在POCO实体的情况下,有几种方法。首先,看看这篇文章http://social.msdn.microsoft.com/Forums/en/adonetefx/thread/15d54768-026a-4f86-b6e5-f40d39d9ef03 - 这里MSFT成员描述了一个解决方案。一个更有用的链接:http://msdn.microsoft.com/en-us/library/dd456854.aspx - 它描述了如何检测POCO实体的变化。 – Devart 2010-11-17 11:27:43