Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.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/6/entity-framework/4.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 5和EF7中设置代码优先方法中的可选字段_Asp.net_Entity Framework_Entity Framework 6_Asp.net Core Mvc - Fatal编程技术网

如何在ASP.NET 5和EF7中设置代码优先方法中的可选字段

如何在ASP.NET 5和EF7中设置代码优先方法中的可选字段,asp.net,entity-framework,entity-framework-6,asp.net-core-mvc,Asp.net,Entity Framework,Entity Framework 6,Asp.net Core Mvc,我正在处理一个项目,我想在代码优先的方法中将一些属性设置为可选。在我的类文件中,我已将[Required]添加到属性中,我将在SQL中设置为NOTNULL,而没有[Required]的属性在SQL中应设置为allow null,但对于其中包含ID的某些属性,它在SQL中设置为NOTNULL。下面是我的示例类,它包含在数据库中生成表时应使用的属性。在MSSQL中创建新数据库时,我想将EnvironmentLastDeployedId属性设置为可选 public class Version {

我正在处理一个项目,我想在代码优先的方法中将一些属性设置为可选。在我的类文件中,我已将
[Required]
添加到属性中,我将在SQL中设置为NOTNULL,而没有
[Required]
的属性在SQL中应设置为allow null,但对于其中包含ID的某些属性,它在SQL中设置为NOTNULL。下面是我的示例类,它包含在数据库中生成表时应使用的属性。在MSSQL中创建新数据库时,我想将
EnvironmentLastDeployedId
属性设置为可选

public class Version
{
    public int Id { get; set; }

    [Required]
    public string PackageName { get; set; }
    public string VersionName { get; set; }
    public string OriginalPackageName { get; set; }

    [Required]
    public string CommitID { get; set; }
    public string CommitMessage { get; set; }
    public int ApplicationId { get; set; }
    public Application Application { get; set; }
    public string CreatedBy { get; set; }
    public int EnvironmentLastDeployedId { get; set; }
    public Environment EnvironmentLastDeployed { get; set; }
    public int StatusId { get; set; }
    public Status Status { get; set; }
    public DateTime CreatedOn { get; set; }
    public DateTime ModifiedOn { get; set; }
}
在我的上下文类文件中,我尝试使用Fluent API,但我只得到了
IsRequired
方法,而不是
IsOptional
或允许我在数据库中将表列设置为允许null的内容

protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Version>()
            .Property(p => p.EnvironmentLastDeployedId).IsRequired();
    }
模型创建时受保护的覆盖无效(ModelBuilder ModelBuilder)
{
modelBuilder.Entity()
.Property(p=>p.EnvironmentLastDeployedId).IsRequired();
}

如果要允许int为空值,只需使用int即可:

public int? ApplicationId { get; set; }

这将映射到SQL中的一个可空列,因此在尝试存储该列的空值记录时不会引发任何异常。

感谢您的响应。我已经在类文件中使用了
public int environment lastdeployedid{get;set;}
。但由于某种原因,它在SQLServer.Ohh中创建了NOTNULL列,所以您的意思是添加问号,并将其设置为nullable<代码>公共int?EnvironmentLastDeployedId{get;set;}对于
string
类型,您不允许写入
公共字符串吗?myString{get;set;}
,因为字符串类型已经可以
为空
。如果您不希望它们是可选的,只需在它们前面添加
[必需的]
。@masoud keshavarz这篇文档提到“字符串?”-如果启用了可空引用类型,则将根据其.NET类型的C#nullability:字符串来配置属性?将配置为可选,而字符串将根据需要配置@masoud keshavarz为这一混乱感到抱歉,事实上,那篇文章说“C#8引入了一个称为nullable引用类型的新特性,该特性允许对引用类型进行注释,指示它们是否包含null是有效的。该特性在默认情况下是禁用的,如果启用,它将以以下方式修改EF Core的行为:”,因此,必须启用该行为