3

DbContext エンティティのデフォルト tt は、コレクション プロパティの初期化コードをエンティティのコンストラクタに追加します。各コレクションには空の HashSet が割り当てられます

スカラー エンティティ プロパティの場合、tt には次のコードがあります。

public string Property(EdmProperty edmProperty)
{
    return string.Format(
        CultureInfo.InvariantCulture,
        "{0} {1} {2} {{ {3}get; {4}set; }}",
        Accessibility.ForProperty(edmProperty),
        _typeMapper.GetTypeName(edmProperty.TypeUsage),
        _code.Escape(edmProperty),
        _code.SpaceAfter(Accessibility.ForGetter(edmProperty)),
        _code.SpaceAfter(Accessibility.ForSetter(edmProperty)));
}

次のように変更した場合:

public string Property(EdmProperty edmProperty)
{
    return string.Format(
        CultureInfo.InvariantCulture,
        "{0} {1} {2} {{ {3}get; {4}set; }}",
        AccessibilityAndVirtual(Accessibility.ForProperty(edmProperty)),
        _typeMapper.GetTypeName(edmProperty.TypeUsage),
        _code.Escape(edmProperty),
        _code.SpaceAfter(Accessibility.ForGetter(edmProperty)),
        _code.SpaceAfter(Accessibility.ForSetter(edmProperty)));
}

AccessibilityAndVirtual() の追加 EF は、コレクションが既に EntityCollection に設定されていることを示す InvalidOperationException のスローを開始します。

なぜこれが起こるのですか?

アップデート:

PK プロパティから virtual を削除すると、例外が削除されました。

4

2 に答える 2