【问题标题】:How to set optional field in code first approach in ASP.NET 5 and EF7如何在 ASP.NET 5 和 EF7 的代码优先方法中设置可选字段
【发布时间】:2016-02-05 16:14:03
【问题描述】:

我正在做一个项目,我想在代码优先方法中将一些属性设置为可选。在我的类文件中,我已将[Required] 添加到我将在SQL 中设置为不为空的属性中,并且没有[Required] 的属性应设置为在SQL 中允许为空,但对于其中包含ID 的某些属性,它设置为在 SQL 中不为空。下面是我的示例类,其中包含在数据库中生成表时应使用的属性。在 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; }
}

在我的 Context 类文件中,我尝试使用 Fluent API,但我只得到 IsRequired 方法,但没有得到 IsOptional 或允许我将表列设置为允许在数据库中为空的东西。

protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Version>()
            .Property(p => p.EnvironmentLastDeployedId).IsRequired();
    }

【问题讨论】:

    标签: asp.net entity-framework entity-framework-6 asp.net-core-mvc


    【解决方案1】:

    如果你想允许 int 为空值,你只需要使用 int?:

    public int? ApplicationId { get; set; }
    

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

    【讨论】:

    • 感谢您的回复。我已经在我的类文件中使用public int EnvironmentLastDeployedId { get; set; }。但由于某种原因,它在 EF7 中创建了 SQL 服务器中的非空列。
    • 哦,所以您的意思是添加问号并将其设置为可为空? public int? EnvironmentLastDeployedId { get; set; }
    • 对于string 类型你不能写public string? myString { get; set; } 因为字符串类型已经是nullable。如果您希望它们不是可选的,只需在它们之前添加[Required]。
    • @masoud-keshavarz 这个文档谈到“字符串?” - 如果启用了可为空的引用类型,将根据其 .NET 类型的 C# 可空性配置属性:字符串?将被配置为可选,而字符串将根据需要进行配置。 docs.microsoft.com/en-us/ef/core/modeling/…
    • @masoud-keshavarz 很抱歉造成混淆,实际上那篇文章说“C# 8 引入了一个称为可为空的引用类型的新功能,它允许对引用类型进行注释,指示它们包含是否有效null 与否。默认情况下禁用此功能,如果启用,它会以以下方式修改 EF Core 的行为:",因此必须启用该行为
    猜你喜欢
    • 2016-04-14
    • 2017-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-05
    • 2019-11-17
    相关资源
    最近更新 更多