Metadata
属性类型为INavigationBase
.但是,当前的实际类型可能是INavigation
或ISkipNavigation
.后者用于多对多跳过导航,前者用于常规导航,并且是您所需要的,因为它提供了类型IForeignKey
的ForeignKey
属性,该属性反过来提供对所需信息的访问.所有这些接口都是公共的(公共元数据API的一部分).
换句话说,强制转换到适当的接口并使用它(不确定为什么他们公开实现类,通常不公开),例如
var entry = context.Entry(this);
foreach(var col in entry.Collections)
{
var nav = col.Metadata as Microsoft.EntityFrameworkCore.Metadata.INavigation;
if (nav == null)
continue;
var fk = nav.ForeignKey;
var deleteBehavior = fk.DeleteBehavior; // here you go
}