2013-02-20 10 views
0

Помогите мне в этом, я действительно смущен!Обновление через Entity Framework

Я просто хочу что-то обновить! Это мой контроллер (после действия):

[HttpPost] 
public ActionResult Edit(CategoryViewModel categoryViewModel) 
{ 
      if(ModelState.IsValid) 
      { 
       _categoryService.UpdateCategory(categoryViewModel.Id); 
      } 
      return View(); 
} 

и это мой класс обслуживания (мой вопрос об этом классе, я не знаю, как обновить его)

public CategoryViewModel UpdateCategory(Guid categoryId) 
{ 
      var category = _unitOfWork.CategoryRepository.FindBy(categoryId); 
      var categoryViewModel = category.ConvertToCategoryViewModel(); 
      _unitOfWork.CategoryRepository.Update(category); 
      _unitOfWork.SaveChanges(); 
      return categoryViewModel; 
} 

и, наконец, My базовый репозиторий, как это:

private readonly DbSet<T> _entitySet; 

public void Update(T entity) 
{ 
      _entitySet.Attach(entity); 
} 

также мой UnitOfWork это:

public class UnitOfWork : IUnitOfWork 
{ 
    private IRepository<Category> _categoryRepository; 

    public IRepository<Category> CategoryRepository 
    { 
      get { return _categoryRepository ?? (_categoryRepository = new Repository<Category>(_statosContext)); } 
    } 
} 
+2

Где код, который обновляет свойства объекта 'category'? –

+1

Кроме того, я полагаю, что ваша переменная '_unitOfWork' является производным объектом' DbContext' или 'ObjectContext'. Это правда? Если нет, то каково тело вашей функции SaveChanges? –

+0

Да, мой _UnitOfWork variabel id DbCotext, но моя проблема в классе обслуживания, в основном у меня есть проблемы с алгоритмом этого, хотя я редактирую свой вопрос и с моей UnitOfwork –

ответ

0

Изменить UpdateCategory чтобы принять CategoryViewModel вместо Guid. Добавьте экземпляр UpdateFromViewModel(CategoryViewModel model) к объекту Category, задача которого - взять свойства из модели и перенести их в объект EF. После этого остальная часть вашего кода должна работать. Существуют и другие шаблоны, которые могут быть использованы для достижения этого, но, учитывая существующие шаблоны, это должно привести вас к финишу.

public class Category 
{ 
    public void LoadFromModel(CategoryViewModel model) 
    { 
     // Transfer properties from model to entity here 
    } 
} 

public class CategoryService 
{ 
    public void UpdateCategory(CategoryViewModel model) 
    { 
     var category = _unitOfWork.CategoryRepository.FindBy(model.CategoryId); 
     category.LoadFromModel(model); 
     _unitOfWork.SaveChanges(); 
     model.CategoryId = category.CategoryId; 
    } 
} 
+0

спасибо, что я изменил свой метод обслуживания, как этот общедоступный Категория UpdateCategory (CategoryViewModel categoryViewModel) { var category = categoryViewModel.ConvertToCategoryModel(); _unitOfWork.CategoryRepository.Update (категория); _unitOfWork.SaveChanges(); категория возврата; } –

+0

, но теперь у меня есть эта проблема с public void Update (T entity) { _entitySet.Attach (entity); } , который говорит мне. Объект с тем же ключом уже существует в ObjectStateManager. ObjectStateManager не может отслеживать несколько объектов с одним и тем же ключом. что такое правило Dbset <> для обновления объекта? –

+0

Извините за путаницу. Мое намерение заключалось в том, что вы сначала загрузили объект из контекста с помощью Guid, а затем вызываете функцию экземпляра класса 'Category' для сопоставления свойств модели с объектами Entity. Таким образом, вы будете работать с правильно прикрепленным объектом. С помощью этого изменения вы можете удалить вызов 'Update' в' CategoryRepository'. –

Смежные вопросы