我想知道EntityEntry中所有集合的删除操作.但它是在一处私有财产里.我可以通过反思来得到它,但我想还有更好的方法吗?

enter image description here

var entry = context.Entry(this);
foreach(var col in entry.Collections)
{
    var met = col.Metadata as Microsoft.EntityFrameworkCore.Metadata.RuntimeNavigation;
    if (met == null)
        continue;
    var fk = met.ForeignKey;  
    fk.DeleteBehavior ???
}

推荐答案

Metadata属性类型为INavigationBase.但是,当前的实际类型可能是INavigationISkipNavigation.后者用于多对多跳过导航,前者用于常规导航,并且是您所需要的,因为它提供了类型IForeignKeyForeignKey属性,该属性反过来提供对所需信息的访问.所有这些接口都是公共的(公共元数据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
}

.net相关问答推荐

节省用户在整个应用程序中使用的Flutter

带有ASP.NET核心的Angular 项目模板.API试验

从 Contentful 中的富文本元素中获取价值?

为什么解码后的字节数组与原始字节数组不同?

如何获得友好的操作系统版本名称?

在 C# 中将字节数组保存为磁盘上的文件的最有效方法是什么?

MongoDB C# 驱动程序 - 忽略绑定字段

生产代码中的 System.Diagnostics.Debug.WriteLine

为什么要判断这个!= null?

无法加载文件或程序集'System.ComponentModel.Annotations,版本 = 4.1.0.0

InternalsVisibleTo 属性不起作用

Mono 是树莓派

使用 XmlSerializer 将空 xml 属性值反序列化为可为空的 int 属性

mscorlib 代表什么?

Find() 和 First() 抛出异常,如何改为返回 null?

是否可以在 XP 上运行 .NET 4.5 应用程序?

自创建数据库以来,支持ApplicationDbContext上下文的模型已更改

获取系统中已安装的应用程序

C#/.NET 中仅命名空间的类可见性?

为什么 IList 不支持 AddRange