2013-10-14 49 views
0
var properties = person.GetType().GetProperties(BindingFlags.DeclaredOnly | 
                BindingFlags.Public | 
                BindingFlags.Instance); 

以上作爲屬性的一部分返回CarCarReference,但這些屬於Person的外部實體。我想從GetProperties中排除它們。我怎樣才能做到這一點?如何在實體上調用GetProperties時排除外國實體?

+0

你是什麼意思「外國實體?「你能提供一個例子嗎? – Romoku

+0

@Romoku - 在我的數據庫中,Car對Person有一個Foriegn鍵,所以當我創建我的Model時,它會創建一個CarReference。 – xaisoft

+0

您在這裏混合了反射和實體框架特定的屬性。如果你想通過僅使用反射來解決這個問題,你可以檢查屬性的'PropertyType'並且自己實現一些約定。 –

回答

0

EntityFrameworkPOCO s被設計成難以計算出什麼是關聯。這是因爲所有的信息都在Entity Framework之間,並且沒有任何信息在POCO(POCO的種類)中。你將不得不進入EF的EDM課程。

您可以通過

var objectContext = ((IObjectContextAdapter)dbContext).ObjectContext; 
var metadata = objectContext.MetadataWorkspace; 

訪問EDM我想......但是,這是我能爲你做最好...

0

好了,質樸的解決方案,但它可能是不夠您的需求。

只排除這是類屬性(這將排除單個導航性能)和通用型(這將排除集合屬性,例如在CarICollection<Person>

var properties = typeof(Items).GetProperties(BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.Instance) 
       .Where(m => !m.PropertyType.IsClass && 
          !m.PropertyType.IsGenericType); 
+0

如果我需要排除屬性,我可能需要將它們添加到某個排除列表或將它們添加到where子句,對吧? – xaisoft

+0

@xaisoft對! –

相關問題