Только код EF4 + сервис Ria - PullRequest
       25

Только код EF4 + сервис Ria

1 голос
/ 16 ноября 2010

Я думал, что мог бы использовать свой 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);
    }
}

1 Ответ

1 голос
/ 17 ноября 2010

Проблема, по-видимому, связана с тем фактом, что сущность имеет состояние Отдельно стоящая сущность в момент ее удаления.
Решение аналогичной проблемы описано, например, здесь .

...