如果我正在使用Guid Identity Web Api 2它给了我一个错误

时间:2016-06-10 00:06:37

标签: c# asp.net-mvc asp.net-web-api2

所以这是我的Exmaple: 型号:

[Table("Items")]
public class Item
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid Id { get; set; }
    [Required]
    public string Name { get; set; }
}

我的Web Api 2控制器部分:

// POST: api/Items
[ResponseType(typeof(Item))]
public async Task<IHttpActionResult> PostItem(Item item)
{
    if (!ModelState.IsValid)
    {
        return BadRequest(ModelState);
    }
    item.Id = Guid.NewGuid();
    db.Items.Add(item);
    await db.SaveChangesAsync();

    return CreatedAtRoute("DefaultApi", new { id = item.Id }, item);
}

在插入时我收到错误,但如果我使用字符串和Guid.NewGuid().Tostring();一切正常,以这种方式开发我的应用程序没有问题,但我想了解问题是什么,使用GUID就像这样工作在MVC5上。

1 个答案:

答案 0 :(得分:2)

由于使用Guid作为您的Id类型,因此无法将其定义为属性标识 删除您的Id上方的此注释:

[DatabaseGenerated(DatabaseGeneratedOption.Identity)]

并在模型的构造函数中添加Guid.NewGuid()

[Table("Items")]
public class Item
{
    public Item(){
      Id=Guid.NewGuid();
    }

    [Key]
    public Guid Id { get; set; }
    [Required]
    public string Name { get; set; }
}

然后不要将您的ID设置为Guid.NewGuid(),只需创建一个新的对象。