Только код EF4 + сервис Ria
Я думал, что могу использовать свой 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);
}
}
Дело в том, что, пока работает Query, операции Delete и Update генерируют исключения вроде:
"Объект не может быть удален, потому что он не был найден в 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);
}
}
1 ответ
Решение
Эта проблема, по-видимому, связана с тем фактом, что сущность имеет состояние "Отдельная сущность" в момент ее удаления.
Решение аналогичной проблемы описано здесь, например.