DatabaseGeneratedOption.Identity不生成ID

问题描述 投票:9回答:3

首先使用EntityFramework代码,我创建了一个简单的Foo表。这是我的实体:

public class Foo
{
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public virtual string Id { get; set; }

    public virtual string Name { get; set; }
}

但是无论何时尝试插入新行,我都会得到一个Cannot insert the value NULL into column 'Id'。为什么添加了DatabaseGenerated属性后会发生这种情况?删除并重新创建我的表没有任何区别。

c# asp.net-mvc entity-framework
3个回答
11
投票

string列类型的标识不受SQL Server支持。 (您希望这样的字符串看起来如何?)要使其正常工作,您可以-例如-在SQL Server中添加一个计算列/用户定义的函数,该函数可格式化普通int身份列的字符串-如图here


7
投票
  1. 您忘记了Key属性。并且不需要使用virtual作为主键。
  2. 如Slauma所述,您不能将Identity用于字符串数据类型。

尝试此代码:

public class Foo
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    public virtual string Name { get; set; }
}

0
投票

我知道这是一个老话题,但将来对任何人来说:

DatabaseGenerated(DatabaseGeneratedOption.Identity)

不生成任何值,它只是让EF知道DB假定要生成MS documentation中所述的值。因此,您必须在数据库中,模型中设置默认值,或者在控制器中分配实际值。

© www.soinside.com 2019 - 2024. All rights reserved.