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 を削除すると、例外が削除されました。