Entity Framework 核心 5.0 参考导航 RequiredAttribute + 迁移不工作

Entity Framework Core 5.0 Reference Navigation RequiredAttribute + Migration not working

我们最近刚刚将一个 ASP.NET 核心项目升级到 5.0,所有 Entity Framework (nuget) 升级可用 - 将其全部升级到最新的 5.0 版本。

创建新的迁移时,似乎带有 [Required] 属性的参考导航 属性 不再导致迁移将列创建为 NOT NULL

我们的代码(注意Template参考导航属性):

/// <summary>
/// A document is a completed template
/// </summary>
public class Document
{
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    [Key]
    public int? Id { get; set; }
    [Required]
    public string Name { get; set; }

    public int CompanyRecId { get; set; }
    public int AgreementRecId { get; set; }
    /// <summary>
    /// A HistoryId is common to all documents copied from an original document.
    /// Thus;
    /// - A document is created via a template
    /// - A second document is created by the original document.
    /// - The two documents are linked by the same GroupId.
    /// </summary>
    [Required]
    public Guid HistoryId { get; set; }
    [Required]
    public string Creator { get; set; }
    [Required]
    public DateTime Created { get; set; }
    [Required]
    public virtual Template Template { get; set; }

...构造函数,方法如下

创建迁移时(例如Add-Migration Update17),生成以下(Up)代码:

    protected override void Up(MigrationBuilder migrationBuilder)
    {
        migrationBuilder.DropForeignKey(
            name: "FK_Documents_Templates_TemplateId",
            table: "Documents");

        migrationBuilder.AlterColumn<int>(
            name: "TemplateId",
            table: "Documents",
            type: "int",
            nullable: true,
            oldClrType: typeof(int),
            oldType: "int");

        migrationBuilder.AddForeignKey(
            name: "FK_Documents_Templates_TemplateId",
            table: "Documents",
            column: "TemplateId",
            principalTable: "Templates",
            principalColumn: "Id",
            onDelete: ReferentialAction.Restrict);
    }

TemplateId 列正在从之前的 nullable: false 更改为 nullable: true - 我的问题是为什么?

我已阅读重大更改文档 here and the relationships documentation here,它似乎表明功能已更改,但在这种特定情况下似乎没有? 添加带有 RequiredAttributeTemplateId 属性 (int?) 时 - 迁移按预期工作并且 TemplateId 列没有任何变化。

我似乎遗漏了什么或没有清楚地理解文档 - 任何帮助将不胜感激!

为了解决这个问题,我在 Template class -

上添加了 属性
public virtual List<Document> Documents { get; set ; }

这似乎为 EF 工具提供了检测 RequiredAttribute 和正确构建迁移所需的内容。