Я думал, что мог бы использовать свой DbContext с DomainService точно так же, как я использую его с любым приложением MVC:
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);
}
}