C# 如果我';我使用Guid标识Web Api 2它给了我一个错误
这是我的前枫叶: 型号: 和我的Web Api 2控制器部件:C# 如果我';我使用Guid标识Web Api 2它给了我一个错误,c#,asp.net-mvc,asp.net-web-api2,C#,Asp.net Mvc,Asp.net Web Api2,这是我的前枫叶: 型号: 和我的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.NewGui
// 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);
}
//POST:api/Items
[响应类型(项目类型))]
公共异步任务发布项(项)
{
如果(!ModelState.IsValid)
{
返回请求(ModelState);
}
item.Id=Guid.NewGuid();
db.Items.Add(项目);
等待db.saveChangesSync();
返回CreatedAtRoute(“DefaultApi”,新的{id=item.id},item);
}
插入时,我收到一个错误,但如果我使用字符串和
Guid.NewGuid().Tostring()代码>一切正常,以这种方式开发我的应用程序没有问题,但我想知道问题是什么,在MVC5上使用这样的GUID。因为使用GUID
作为Id类型,它不能定义为属性标识,所以
删除Id上方的此批注:
[数据库生成(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()
,只需为类创建一个新对象。由于使用Guid
作为Id类型,因此无法将其定义为属性标识,因此
删除Id上方的此批注:
[数据库生成(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()
,只需为类创建一个新对象。数据库不能将Guid对象用作PK,这就是为什么它必须是字符串才能获取GUI的强内容。我认为您使用的是具有标识的列。这可能会导致将列Id自动签名为主键的问题。[DatabaseGenerated(DatabaseGenerateOption.Identity)]数据库不能将GUID对象用作PK,这就是为什么它必须是字符串才能获取GUI的强内容。我认为您使用的是具有标识的列。这可能会导致将列ID自动签名为主键的问题。[数据库生成(DatabaseGeneratedOption.Identity)]