Asp.net mvc 在ASP.NETMVC5应用程序中,外键默认为空吗
我正处于学习阶段。我想知道ASP.NET MVC-5 framework在代码优先约定下创建的外键是否默认为空?我尝试创建外键关系,结果发现外键列可以为空。我的想法是,如果我将一列标记为外键,实体框架应该将它标记为不可为null 下面是一个例子: 一对多:一个“标准”可以有多个“孩子”Asp.net mvc 在ASP.NETMVC5应用程序中,外键默认为空吗,asp.net-mvc,asp.net-mvc-5,foreign-keys,Asp.net Mvc,Asp.net Mvc 5,Foreign Keys,我正处于学习阶段。我想知道ASP.NET MVC-5 framework在代码优先约定下创建的外键是否默认为空?我尝试创建外键关系,结果发现外键列可以为空。我的想法是,如果我将一列标记为外键,实体框架应该将它标记为不可为null 下面是一个例子: 一对多:一个“标准”可以有多个“孩子” 公共类子类 { 公共int Id{get;set;} 公共字符串名称{get;set;} 公共int标准ID{get;set;} [外键(“标准ID”)] 公共虚拟标准{get;set;} } 公共类标准 { 公
公共类子类
{
公共int Id{get;set;}
公共字符串名称{get;set;}
公共int标准ID{get;set;}
[外键(“标准ID”)]
公共虚拟标准{get;set;}
}
公共类标准
{
公共标准()
{
Children=新列表();
}
公共int Id{get;set;}
公共字符串StandardName{get;set;}
公共虚拟ICollection子项{get;set;}
}
在上面的配置中,外键“StandardId”在数据库中显示为
null
。我只是想知道这是预期的行为吗?外键在默认情况下是可为空的还是我没有正确连接外键属性?您必须明确告诉EF,您希望此字段不可为空:
public class YourContext : DbContext
{
public DbSet<Children> Childrens { get; set; }
public DbSet<Standard> Standards { get; set; }
protected override void OnModelCreating(DbModelBuilder dBModelBuilder)
{
modelBuilder.Entity<Children>().HasRequired(x => x.Standard);
}
}
public类YourContext:DbContext
{
公共DbSet子对象{get;set;}
公共数据库集标准{get;set;}
模型创建时受保护的覆盖无效(DbModelBuilder DbModelBuilder)
{
modelBuilder.Entity().HasRequired(x=>x.Standard);
}
}
Ok,那么实现不可为空FK的最佳方法是什么呢。我应该在FK属性上装饰“必需”属性,还是应该遵循您回答的方法。哪一个是正确的,我将始终遵循哪一个?这是一个你是否坚持流畅配置或属性配置的问题。我个人更喜欢流利的“方式”
public class YourContext : DbContext
{
public DbSet<Children> Childrens { get; set; }
public DbSet<Standard> Standards { get; set; }
protected override void OnModelCreating(DbModelBuilder dBModelBuilder)
{
modelBuilder.Entity<Children>().HasRequired(x => x.Standard);
}
}