实体框架5代码优先,WebApi以及如何使用ModelState.IsValid和identity列创建POST方法

时间:2012-11-28 03:52:04

标签: entity-framework ef-code-first asp.net-web-api entity-framework-5

我正在开发一个使用Entity Framework 5 Code First,WebApi和ASPNET MVC 4的项目。 我有一个像这样的模型

public class Category
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Description { get; set; }
    }
}

和这个配置

public class CategoryMap : EntityTypeConfiguration<Categoria>
{
    public CategoryMap()
    {
        // Primary Key
        this.HasKey(t => t.Id);

        // Properties
        this.Property(t => t.Id)
            .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);

        this.Property(t => t.Name)
            .HasMaxLength(50);

        this.Property(t => t.Description)
            .HasMaxLength(100);
    }
}

现在,在我的webapi控制器中(在POST方法中)我正在尝试验证发送的模型,但由于它是POST(创建)而Id是IDENTITY,因此它将变为null或空,因此模型。有效说它不是有效的。

public HttpResponseMessage Post(Category category)
{
    if (ModelState.IsValid)
    {
        ...
        return response;
    }

    throw new HttpResponseException(HttpStatusCode.BadRequest);
}

除了更改列的类型之外是否有任何解决方案,除了不检查模型是否有效之外?

提前致谢!吉列尔莫。

2 个答案:

答案 0 :(得分:0)

我没有亲自使用过WebAPI,但在使用WebAPI中的视图模型而不是实际的域对象时遇到了一些问题吗?

创建“CreateCategory”视图模型类并将其绑定到POST动词。此视图模型与您的域类相同,而不是它不会公开ID属性以及您想要的任何其他更改。由于没有可以验证的属性,因此没有什么可以进行验证。

public HttpResponseMessage Post(CreateCategoryViewModel category)

使用Model.IsValid验证视图模型,它通过验证,然后将视图模型映射到实际的模型对象。

应该与绑定视图模型的标准MVC操作非常相似。

希望有所帮助。

答案 1 :(得分:0)

创建一个接口(比如ICategory),它复制Category属性,Name和Description,并让Category类实现该接口。然后修改您的HTTPRespoonseMessge Post方法,取一个ICategory类型的参数。

公共HttpResponseMessage帖子(ICategory类别) { }