从EDMX文件中获取实体的外键



我试图从edmx文件中获取实体的FK集合。我找不到返回集合或仅返回布尔属性以指示实体的属性为FK的方法或属性。我在MetadataProperties中搜索EntityContainer类,但一无所获。我在GetProperties属性的Type类中搜索了相同的结果,但找不到指示FK的方法或属性。如何从edmx文件中获取实体的FK或FK指示?

对不起,我的英语不好。

感谢

您可以使用反射和过滤ForeignKeyAttribute上的属性来获得Foriegn Key。

public static IEnumerable<PropertyInfo> GetForeignKeyProps(Type type) {
return type.GetProperties()
.Where(prop => prop.IsDefined(typeof(ForeignKeyAttribute), false));
}

用法,获取值:

var obj = new T();
var foreignKeyPropertyInfos = GetForeignKeyProps(typeof (T));
foreach (var foreignKeyPropertyInfo in foreignKeyPropertyInfos)
{
var value = foreignKeyPropertyInfo.GetValue(obj)
}

您可能正在寻找ObjectSet(来自旧的EF),它允许您访问导航属性。你可以这样着手:

var objectContext = ((IObjectContextAdapter)db).ObjectContext;
var os = objectContext.CreateObjectSet<TEntity>();
var foreignKeyProperties = os.EntitySet.ElementType.NavigationProperties.Where(x => x.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.One);

dbDBContextTEntity是您正在使用的实体的类型

最新更新