1

我有.NET 4.0 WinForms應用程序,並使用實體框架5和模型優先方法。在VS EF Designer中,我創建了十幾個標量屬性爲String類型的實體,然後在屬性工具欄中,我已經爲它們配置了參數(即通用參數,方面參數)以符合數據庫要求。在運行時獲取實體構面和其他元數據

在BL層中,我能夠驗證實體對象的目的,以檢查它是否包含正確的值,例如通過使用DbContext.Entry(Of T)(entity).GetValidationResult()方法。但我還需要爲WinForms開發GUI層輸入字段驗證。我想實現基於實體集屬性的元數據值的動態GUI驗證,使BL驗證與GUI驗證同步,並避免編寫源代碼的冗餘。

我的問題是:我怎樣才能獲得元數據值,尤其是微面元數據值在運行時自動生成的實體(即固定長度最大長度可空)?

據我所知,有可能利用基於手動創建的部分類中的屬性屬性的數據註釋。但是,在Model First方法中,此解決方案也可能涉及冗餘問題和VS EF Designer屬性工具欄和數據庫中元數據的同步問題。

回答

2

這會幫助你上手,但你需要去調試和測試專門讓你需要什麼...

一個示例代碼...

using (var db = new MyContext()) 
{ 
var objectContext = ((IObjectContextAdapter)db).ObjectContext; 

var baseset = objectContext 
    .MetadataWorkspace 
    .GetEntityContainer(objectContext.DefaultContainerName, DataSpace.CSpace) 
    .BaseEntitySets 
    .First(meta => meta.ElementType.Name == "YourEntityClassName"); 

var elementType = objectContext 
    .MetadataWorkspace 
    .GetEntityContainer(objectContext.DefaultContainerName, DataSpace.CSpace) 
    .BaseEntitySets 
    .First(meta => meta.ElementType.Name == "YourEntityClassName") 
    .ElementType; 

EdmMember member = elementType.Members[2]; 

Facet item; 
// if (member.TypeUsage.Facets.TryGetValue(EdmProviderManifest.StoreGeneratedPatternFacetName, false, out item)) 
if (member.TypeUsage.Facets.TryGetValue("StoreGeneratedPattern", false, out item)) 
{ 
    var value = ((StoreGeneratedPattern)item.Value) == StoreGeneratedPattern.Computed; 
} 

但是,這只是故事的一部分。

我意識到這是在某些情況下工作(因此您需要嘗試一下),具體取決於您的需要。但你也有other spaces - 例如SSpace。所以例如對於表名這個更好...

var ssSpaceSet = objectContext.MetadataWorkspace.GetItems<EntityContainer>(DataSpace.SSpace).First() 
    .BaseEntitySets 
    .First(meta => meta.ElementType.Name == "YourTableName"); 

...然後私人Table屬性。

在你的情況你應該在那裏的大部分信息 - 但例如,上面創建的商店並不是在那裏生成的 - 但是在我猜測的其他「空間」中(更多地在其中的一個鏈接上)。

,並採取看看下面的鏈接:


Get Model schema to programmatically create database using a provider that doesn't support CreateDatabase
How I can read EF DbContext metadata programmatically?
How check by unit test that properties mark as computed in ORM model?

+0

感謝您的幫助,有用的源代碼和鏈接。 – sgnsajgon 2013-04-11 11:00:32

+0

不客氣@sgnsajgon – NSGaga 2013-04-11 11:08:57

相關問題