如何从Entity Framework元数据获取无引用属性的外键关联类型
解决EF Core获取外键关联实体类型的问题
你用EntityEntry.Metadata.GetReferencingForeignKeys()拿不到外键,是因为这个方法的作用是获取其他实体中引用当前实体作为主键的外键——简单说,只有当你操作的是被引用的实体(比如你的Car)时,调用它才能拿到引用它的外键(比如Person里的CarFk)。如果是操作外键所在的实体(比如Person),这个方法根本不会返回它身上的外键,自然拿不到。
下面分两种场景给出解决方案:
场景1:从外键所在实体(Person)获取关联的实体类型(Car)
直接获取当前实体上的所有外键,找到目标外键后,通过PrincipalEntityType拿到关联的主键端实体类型:
var personEntry = dbContext.Entry(yourPersonInstance); // 获取Person实体定义的所有外键 var allForeignKeys = personEntry.Metadata.GetForeignKeys(); // 筛选出对应CarFk的外键 var carForeignKey = allForeignKeys.FirstOrDefault(fk => fk.Properties.Any(p => p.Name == nameof(Person.CarFk))); if (carForeignKey != null) { // 获取关联的Car实体类型 Type relatedCarType = carForeignKey.PrincipalEntityType.ClrType; }
场景2:从被引用的实体(Car)获取引用它的实体类型(Person)
这时候GetReferencingForeignKeys()就可以正常使用了,拿到外键后通过DeclaringEntityType获取外键所在的实体类型:
var carEntry = dbContext.Entry(yourCarInstance); // 获取所有引用Car的外键 var referencingForeignKeys = carEntry.Metadata.GetReferencingForeignKeys(); foreach (var fk in referencingForeignKeys) { // 获取外键所在的Person实体类型 Type relatedPersonType = fk.DeclaringEntityType.ClrType; }
内容的提问来源于stack exchange,提问作者Gbsyi
相关产品推荐
相关产品推荐

