Какой подход использовать для провайдера с инфраструктурой сущностей?

У меня есть класс:

public class Tool
{
    [EdmScalarPropertyAttribute(EntityKeyProperty=true, IsNullable=false)]
    [DataMemberAttribute()]
    public Int64 ID { get; set; }

    [EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=false)]
    [DataMemberAttribute()]
    public string Name { get; set; }
}

У моего провайдера есть два метода:

public IEnumerable<Tool> GetFirst()
{
    using (var db = new Entitites())
    {
        return db.Tools.FirstOrDefault();
    }
}

public void Update(Tool o)
{
    using (var db = new Entities())
    {
        db.Tools.SaveChanges();
    }
}

Это не работает, потому что они находятся в разных контекстах, параметр метода Update даже не используется. Однако я могу получить объект из базы данных и изменить поля одно за другим с помощью объекта параметра, а затем сохранить изменения.

Что я должен делать?

  • Обновить объект и сохранить?
  • Сохранять только один контекст для провайдеров?
  • Другой подход?

person BrunoLM    schedule 18.02.2011    source источник
comment
Используйте один и тот же контекст для обоих методов. Есть ли сложности в этом?   -  person amit_g    schedule 18.02.2011


Ответы (1)


Я нашел метод attach из еще один вопрос, очень похоже

using (var db = new Entitites())
{
    // Attach the object on this context
    db.Attach(tool);

    // Change the state of the context to ensure update
    db.ObjectStateManager.GetObjectStateEntry(tool).SetModified();

    // ClientWins, flawless victory
    db.Refresh(RefreshMode.ClientWins, tool);
}
person BrunoLM    schedule 18.02.2011