EF 4.1中的NULL异常

时间:2011-09-29 13:31:51

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

我使用Entity Framework 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插入列'Version',表中   'Simply.dbo.SchemaVersion';列不允许空值。 INSERT失败。   声明已经终止。

上下文设置:

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

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

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

1 个答案:

答案 0 :(得分:4)

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

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

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