2011-02-02 72 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及其所有方法/属性。

为什么你需要它?如果你需要在你的仓库中做一些特殊的事情,你应该为这种类型创建特殊的仓库。通用知识库仅适用于非常基本的解决方案。