使用数据注释Required
,如下所示:
[Required]
public int somefield {get; set;}
将数据库中的 somefield 设置为Not Null
,如何设置 somefield
允许NULL?,我尝试通过SQL Server Management Studio进行设置,但实体框架将其设置回 Not Null
。
答案 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