获取EF Core集合的DeleteBehavior:替代反射的更佳方案
获取EntityEntry集合关联的DeleteBehavior最优方案
你完全不需要用反射来获取DeleteBehavior,EF Core本身提供了公开API直接访问,没必要依赖私有属性。
修正后的代码示例:
var entry = context.Entry(this); foreach (var collectionEntry in entry.Collections) { var navigation = collectionEntry.Metadata; var foreignKey = navigation.ForeignKey; if (foreignKey != null) { DeleteBehavior deleteBehavior = foreignKey.DeleteBehavior; // 在这里使用获取到的DeleteBehavior } }
关键说明:
- 无需将
Metadata强转为RuntimeNavigation,INavigation接口本身就暴露了ForeignKey属性,直接调用即可 ForeignKey.DeleteBehavior是EF Core官方设计的公共属性,主流版本(3.x及以上)都支持,这种方式比反射更稳定,不会因为EF Core内部实现变更导致代码失效
内容的提问来源于stack exchange,提问作者Gibrid
相关产品推荐
相关产品推荐

