【问题标题】:Value for PRIMARY KEY recognized as NULL (EF6 Code First)PRIMARY KEY 的值被识别为 NULL(EF6 代码优先)
【发布时间】:2013-12-16 21:58:47
【问题描述】:

好吧,当我尝试插入新值时,我遇到了相当奇怪的异常。请参阅attached files 进行进一步调查。 所以,我使用:

  • SQL Server 2012

  • VS 2012 更新 2

  • EF6 Alpha 3 代码优先

问题是我试图将新值插入到名为 dbo.Worker2 的简单表中(请参阅“Worker2 表”图像文件),该表由 2 列组成:TableNumber 和 Name。 TableNumber 列是整数数据类型的主键(请参阅“主键列属性”图像文件)。我已安装最新的 EF6 alpha3 并尝试插入新值(请参阅“VB.NET 代码”图像文件)。但是,抛出异常:“无法将 NULL 值 NULL 插入列 'TableNumber',表 Bonus.dbo.Worker2';列不允许空值。插入失败。” (参见“VS Exception”图像文件)。

然后我决定查看 EF 使用 SQL Server Profiler 发送到 SQL Server 的 T-SQL 查询,并惊讶地发现 EF 没有发送 TableNumber(请参阅“Profiler 查询”图像文件)。

是错误还是我错过了什么?

【问题讨论】:

    标签: entity-framework


    【解决方案1】:

    从外观上看,您需要将 Worker2 主键属性设置为非数据库生成。

    类似:

    <Key, DatabaseGenerated(DatabaseGeneratedOption.None)>
    Public Property TableNumber As Integer
    

    【讨论】:

    • Property(x => x.TableNumber).HasColumnName("TableNumber").IsRequired().HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);使用流畅的 API
    【解决方案2】:

    我认为主键没有设置为身份。

    【讨论】:

    • 从“主键列属性”图像中可以看出,它不是身份。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多