【问题标题】:NULL Exception in EF 4.1EF 4.1 中的 NULL 异常
【发布时间】:2011-09-29 22:03:05
【问题描述】:

我使用实体框架 4.1、SQL Server 2008 和 .NET 4.0
我有一个 Sql 表:

create table SchemaVersion (
   Version              int                  not null,
   constraint PK_SCHEMAVERSION primary key (Version)
)

还有 POCO

    [Table("SchemaVersion")]
    public class SchemaVersion
    {
        [Key]
        public Int32 Version { get; set; }
    }

我在表格中添加了列

     Context ctx = new Context();
     ctx.SchemaVersions.Add(new SchemaVersion() { Version = 2 });
     ctx.SaveChanges();

在我得到异常之后:

无法将值 NULL 插入“版本”列,表 'Simply.dbo.SchemaVersion';列不允许空值。插入失败。 声明已终止。

上下文设置:

public class Context : DbContext
{
    public DbSet<SchemaVersion> SchemaVersions { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        this.Configuration.ValidateOnSaveEnabled = false;
        base.OnModelCreating(modelBuilder);
    }
}

我觉得很奇怪,谁能帮我解决这个问题

【问题讨论】:

  • 你能展示一下你的上下文是如何设置的代码吗?

标签: .net sql-server-2008 null entity-framework-4.1


【解决方案1】:

尝试禁用密钥的数据库生成:

[Table("SchemaVersion")]
public class SchemaVersion
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public Int32 Version { get; set; }
}

当您向数据库添加新实体时,您似乎希望手动提供 Version 值。默认情况下,EF 假定 int 类型的键是数据库中的身份,并将在那里生成。因此 EF 不会向数据库发送值。如果密钥不是数据库中的标识,则根本不会提供密钥的值,从而导致异常。如果你设置了DatabaseGeneratedOption.None,EF会将你设置的值作为key发送到数据库。

【讨论】:

    猜你喜欢
    • 2012-10-17
    • 2011-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-10
    相关资源
    最近更新 更多