小编pjs*_*pjs的帖子

EF Core 5 向某些实体添加影子备用键,但不使用该属性

更新:下面列出的示例代码现已完整,足以在会议中生成影子备用密钥。当会议实体继承自包含 RowVersion 属性的基本实体时,会在会议实体中生成影子备用键。如果该属性直接包含在会议实体中而不是继承,则不会生成影子备用键。


我的模型在 EF Core 3.1 中按预期工作。我升级到 .Net 5 和 EF Core 5,EF 向多个实体添加了名为 TempId 的影子备用键属性。除非我将这些属性添加到数据库,否则 EF 无法加载这些实体。我在模型中找到的任何关系中都未使用影子备用键属性。事实上,所有关于影子属性的讨论要么是针对外键,要么是针对隐藏属性。我找不到任何解释为什么 EF 会添加影子备用键,特别是如果它不使用该属性。有什么建议么?

获得影子备用密钥的实体之一是 Conference,它是一种关系中的子实体和另一种关系中的父实体。我有许多类似的实体,它们没有获得影子备用密钥,而且我看不出它们之间有任何区别。

我使用主键的备用键循环遍历模型实体,识别所有影子属性和所有关系。关系中不使用影子备用键。我确实看到了两个定义的关系,其中我专门使用了备用键,所以我相信我的代码是正确的。

这是一个完整简化的 EF 上下文及其两个实体,演示了该问题。

using Microsoft.EntityFrameworkCore;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace EFShadow
{
    public partial class Conference
    {
        public Conference()
        {
            Meetings = new HashSet<Meeting>();
        }

        [Key]
        public string ConferenceCode { get; set; }

        [Required]
        public string ConferenceName { get; set; }

        public ICollection<Meeting> Meetings { get; }
    }

    public partial class Meeting : BaseEntity …
Run Code Online (Sandbox Code Playgroud)

entity-framework entity-framework-core ef-core-5.0

5
推荐指数
1
解决办法
1709
查看次数