如何在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的行为:”,因此,必须启用该行为