2017-08-09 68 views
1

我正处于学习阶段。我想知道的是ASP.NET MVC-5框架在Code First约定中使用实体框架可以为空的默认为空的外键?我试图创建外键关系,而外键列原来是空的。我有一个概念,如果我把一个列标记为外键,它应该被实体框架标记为NOT NULLABLE。在ASP.Net MVC 5应用程序中默认可以使用外键可空

下面是例子:一个“标准”可以有许多“孩子”:

一对多。

public class Children 
    { 
     public int Id { get; set; } 
     public string Name { get; set; } 

     public int StandardId { get; set; } 
     [ForeignKey("StandardId")] 
     public virtual Standard Standard { get; set; } 
    } 

    public class Standard 
    { 

     public Standard() 
     { 
      Children = new List<Children>(); 
     } 
     public int Id { get; set; } 
     public string StandardName { get; set; } 

     public virtual ICollection<Children> Children { get; set; } 
    } 

只需上面的配置,外键“StandardId”中走出来在数据库Nullable。我只是想知道这是预期的行为?外键是否被DEFAULT设置为NULLABLE,或者我没有正确连接外键属性?

回答

3

你必须明确地告诉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); 
    } 
} 
+0

好了,什么是acheive非空的FK的最佳途径。如果我在FK属性上装饰了“必需”属性,或者我应该按照您回答的方法。哪一个是正确的,哪一个我会一直遵循? – Unbreakable

+2

无论你坚持流利的配置还是属性配置,这都是一个问题。我个人更喜欢流利的“方式” – Piotr

+0

这清除了我的怀疑。非常感谢你。 – Unbreakable

相关问题