可空属性到实体字段,实体框架通过Code First

时间:2012-05-22 21:23:38

标签: entity-framework asp.net-mvc-3 code-first nullable

使用数据注释Required,如下所示:

[Required]
public int somefield {get; set;}

将数据库中的 somefield 设置为Not Null,如何设置 somefield 允许NULL?,我尝试通过SQL Server Management Studio进行设置,但实体框架将其设置回 Not Null

4 个答案:

答案 0 :(得分:96)

只需省略string somefield属性中的[Required]属性即可。这将使它在db中创建一个NULL能够列。

要使int类型允许数据库中的NULL,必须在模型中将它们声明为可为空的int:

// an int can never be null, so it will be created as NOT NULL in db
public int someintfield { get; set; }

// to have a nullable int, you need to declare it as an int?
// or as a System.Nullable<int>
public int? somenullableintfield { get; set; }
public System.Nullable<int> someothernullableintfield { get; set; }

答案 1 :(得分:29)

另一个选项是告诉EF允许列为空:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
        modelBuilder.Entity<SomeObject>().Property(m => m.somefield).IsOptional();            
        base.OnModelCreating(modelBuilder);
}

此代码应位于继承自DbContext

的对象中

答案 2 :(得分:3)

Jon的答案对我来说没有用,因为我遇到编译器错误 CS0453 C#该类型必须是非可空值类型才能将其用作参数&#39; T& #39;在通用类型或方法中

这对我有用:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<SomeObject>().HasOptional(m => m.somefield);
    base.OnModelCreating(modelBuilder);
}

答案 3 :(得分:0)

Ef .net核心 中,您可以选择两个选项:首先带有数据注释:

public class Blog
{
    public int BlogId { get; set; }
    [Required]
    public string Url { get; set; }
}

或使用流利的api:

class MyContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Blog>()
            .Property(b => b.Url)
            .IsRequired(false)//optinal case
            .IsRequired()//required case;
    }
}

public class Blog
{
    public int BlogId { get; set; }
    public string Url { get; set; }
}

还有更多详细信息,here