C# 如果我';我使用Guid标识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

这是我的前枫叶: 型号:

和我的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);
}
//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)]