当ViewModel具有BaseModel属性

时间:2018-03-07 16:27:57

标签: c# entity-framework asp.net-web-api2 automapper repository-design

我正在使用WebAPI2,我有2个模型

public class Model1
{
    public int Id { get; set; }
    [Required]
    public string Name { get; set; }
    public string Description { get; set; }

    public IList<Model2> Children{ get; set; }
}

public class Model2
{
    public int Id { get; set; }
    [Required]
    public string Name { get; set; }
    public string Description { get; set; }
    public int Model1Id { get; set; }

    public virtual Model1 Model1 { get; set; }
}

在我的视图模型中,我使用 Automapper 将其转换为ViewModel 我的第一个CRUD操作很好,因为ViewModel也和Model1一样。

对于我的第二个模型(Model2),以下是我的ViewModel

 public class Model2ViewModel
{
    public int Id { get; internal set; }
    [Required]
    public string Name { get; set; }
    public string Description { get; set; }
    public int Model1Id { get; set; }

     public string Model1Name { get; internal set; }
     public string Model1Description { get; internal set; }
}

我的代码如下;

    public async Task<IHttpActionResult> Post(int model1Id, Model2ViewModel model)
    {
        try
        {
            model.Model1Id= model1Id;
            var item = Mapper.Map<Model2>(model);

             myRepo.Add(item);
             myRepo.SaveAsync()
            if (!result)
            {
                return BadRequest("Could not Save to the database");
            }

            return Created(uri, Mapper.Map<Model2ViewModel>(item));
        }
        catch (ArgumentException ex)
        {
            ModelState.AddModelError(ex.ParamName, ex.Message);
            return BadRequest(ModelState);
        }
    }

我正在使用Repository Pattern,添加记录中的逻辑如下;

    public void Add(T entity)
    {
        entity.RecordStatus = DataStatus.Active;
        entity.CreatedDate = entity.UpdatedDate = DateTime.UtcNow;
        _context.Set<T>().Add(entity);
    }

    public async Task<bool> SaveAsync()
    {
        int count = await _context.SaveChangesAsync();
        return count > 0;
    }

当我使用Model2的post方法时,我得到了Model1需要Name之类的错误。为什么Model1也试图创造。请帮帮我

注意:为简单起见,我直接在控制器代码中添加了我的repo调用。在实际代码中,它调用业务方法,并从那里只调用repo。

0 个答案:

没有答案