【问题标题】:ASP.NET MVC Entity Framework Id cannot be nullASP.NET MVC 实体框架 Id 不能为空
【发布时间】:2017-06-20 08:24:10
【问题描述】:

当涉及到 ASP 身份时,我创建了一个新表,即使用代码优先和迁移的自定义表(代码如下)。当我尝试使用 DbContext 插入该表时,我有来自实体框架的 id cannot be null 错误。我尝试使用带有注释的 id 作为计算/身份,错误是一样的。

当然,我错过了一些东西,但我不知道是什么。

public class AspNetCountryTable
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public String Id { get; set; }
        public String CountryName { get; set; }
        public String CountryCode { get; set; }
    }

我想要做的是自动生成 ID(字符串),就像 asp identity 为用户生成 id 一样。

谢谢!

【问题讨论】:

  • 您是否更新了您的数据库以便它实际生成一个 ID?
  • @Fabiano 我使用了 add-migration "new_migration_name" 和 update-database 从包控制台生成(理论上)新的 sql 表。还有其他事情要做吗?
  • 你能用[DatabaseGenerated(DatabaseGeneratedOption.None)]代替[DatabaseGenerated(DatabaseGeneratedOption.Identity)]吗?
  • String 是一个可以为空的类型,因此它不像 int 在应用 DatabaseGeneratedOption.Identity 选项时那样使用计算值。尝试改用[DatabaseGenerated(DatabaseGeneratedOption.None)],或遵循类似的步骤herehere,但它存储字符串而不是GUID。
  • 什么期望 SQL 从string 生成标识列?

标签: c# asp.net asp.net-mvc entity-framework asp.net-identity


【解决方案1】:

必须在 SQL 级别添加 Id 列作为唯一标识符,而不是迁移脚本中的字符串和默认 sql 值:newsequentialid()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-26
    • 2010-09-25
    • 1970-01-01
    • 2012-10-18
    • 2011-02-20
    • 1970-01-01
    • 2012-07-22
    • 1970-01-01
    相关资源
    最近更新 更多