Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 在ASP.NETMVC5应用程序中,外键默认为空吗_Asp.net Mvc_Asp.net Mvc 5_Foreign Keys - Fatal编程技术网

Asp.net mvc 在ASP.NETMVC5应用程序中,外键默认为空吗

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;} } 公共类标准 { 公

我正处于学习阶段。我想知道ASP.NET MVC-5 framework在代码优先约定下创建的外键是否默认为空?我尝试创建外键关系,结果发现外键列可以为空。我的想法是,如果我将一列标记为外键,实体框架应该将它标记为不可为null

下面是一个例子:

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

公共类子类
{
公共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);
    }
}