[英]How to get a tree structure from Entity Framework's model metadata
我正在開發一個動態報告生成器,它允許最終用戶使用Entity Framework模型基本上創建自己的SELECT語句。 讓我先描述一下我要實現的目標:
我當時正在考慮使用反射來執行此操作,這似乎是一種相對簡單的方法,但存在局限性(例如確定屬性是否為外鍵)。 我知道也有MetadataWorkspace類,但這對我來說很混亂,以前從未使用過。 我還需要提及的是,我知道潛在的參考循環,因此相關實體會有深度限制。 如何創建這樣的實體關系樹?
附加信息
我忘了提一下,我正在做的這個項目將是一個可重用的庫,因此它應該與任何dbContext一起使用,最好(如果可能)與dbContext一起使用,而無需修改模型或添加屬性。
有關您的開發的一些准則:
下面的方法可以提取模型的所有類屬性:
public static IEnumerable<PropertyInfo> ExtractTypeProperties(Type type) { return type.GetProperties(BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.FlattenHierarchy); }
導航屬性通常是virtual
。 您可以使用如下所示的屬性來獲取這些屬性:
foreach (var property in typeof(MyModel).GetProperties().Where(p => p.GetGetMethod().IsVirtual)) { ... }
模型主鍵通常具有名稱Id
, TheModelId
或用[Key]
裝飾;
Id
后綴除外,或者使用[ForeignKey]
裝飾。 請注意,導航屬性也可以使用此屬性進行修飾,因此我認為您必須進行仔細檢查才能滿足所有約定。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.