【问题标题】:Are foreign key nullable by default in ASP.Net MVC 5 application在 ASP.Net MVC 5 应用程序中默认情况下外键可以为空吗
【发布时间】:2017-08-10 06:44:21
【问题描述】:

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

下面是例子:

一对多:一个“标准”可以有多个“子”。

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。我只想知道这是预期的行为吗?外键是否默认为 NULLABLE 或者我没有正确连接外键属性?

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-5 foreign-keys


    【解决方案1】:

    您必须明确告诉 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);
        }
    }
    

    【讨论】:

    • 好的,那么实现不可为空的 FK 的最佳方法是什么。我应该在 FK 属性上装饰“必需”属性,还是应该按照您回答的方法。哪个是正确的,哪个是我将永远遵循的?
    • 这是你坚持流畅配置还是属性配置的问题。我个人更喜欢流利的“方式”
    猜你喜欢
    • 2015-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-09
    • 2011-11-12
    • 1970-01-01
    相关资源
    最近更新 更多