通过实体框架更新

时间:2013-02-20 16:19:53

标签: c# asp.net-mvc-3 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;
}

最后我的基础知识库如下:

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)); }
    }
}

1 个答案:

答案 0 :(得分: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;
    }
}