2011-02-02 52 views
0

我不知道如何獲取EntityFramework元數據Entity(我的EF設計師/ edmx)爲Poco對象。是否有可能使用代碼來確定Poco映射到實體框架CTP5的實體?

例如。

我的圖有一個實體,名爲User。我也有一個名爲User的Poco課程。我的印象是實體名稱和Poco需要是相同的名稱,所以約定可以自動映射兩者(以及具有相同屬性名稱的poco等)。

因此,如果我有一個Poco類型,我如何檢索實體並因此檢查該實體以查看它的元數據,如EntityKeyStoreGeneratedPattern等?

哦 - 順便說一下...我不知道波科類型是什麼意思.. ..類使用泛型...

public class GenericRepository<T> : IRepository<T> where T : class 
{ ... } 

所以,我想我將不得不問上下文...抓住我的實體有name == typeof(T).Name或其他什麼...

回答

0

如果你有訪問ObjectContext(我認爲你必須有,因爲EntityKey/EntityState沒有意義,沒有您可以使用以下內容

ObjectStateEntry ose = 
    context.ObjectStateManager.GetObjectStateEntry(yourObject); 

從那裏,你可以得到各種有趣的特性:http://msdn.microsoft.com/en-us/library/system.data.objects.objectstateentry.aspx

您也可以找到TryGetObjectStateEntry(...)是得心應手。

+0

heya :)嗯。我明確有權訪問上下文(這是一個DbContext)..但是沒有ObjectStateManager屬性,在該上下文中?它是否被重命名爲CTP5? – 2011-02-02 03:44:39

+0

另外..如果我在內存中沒有任何實體會發生什麼?我是否仍然可以獲取結構並查詢屬性? – 2011-02-02 04:02:03

1

訪問映射元數據通常由ObjectContext.MetadataWorkspace執行。 CTP5隱藏了ObjectContext實例,其大部分與映射相關的映射類(基於DbMappingMetadataItem)都是內部的或僅包含內部成員。

看起來您的DbContext是從EDMX自動生成的。你可以做這件事情是通過調用構造函數創建DbContext,該構造函數接受ObjectCotnext。在這種情況下,您將有權訪問ObjectContext及其所有方法/屬性。

爲什麼你需要它?如果你需要在你的倉庫中做一些特殊的事情,你應該爲這種類型創建特殊的倉庫。通用知識庫僅適用於非常基本的解決方案。