所以这是我的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上。
答案 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()
,只需创建一个新的对象。