是否可以使用代码确定Poco为实体框架CTP5映射到哪个实体?

时间:2011-02-02 00:51:07

标签: entity-framework metadata poco entity-framework-ctp5

我不确定如何为EntityFramework对象获取Entity(我在我的EF设计人员/ edmx上)的Poco元数据。

例如。

我的图表中有一个名为User的实体。我还有一个名为User的Poco类。我的印象是实体名称和Poco需要是相同的名称,因此约定可以自动映射两者(以及具有相同属性名称的poco等等)

因此,如果我有一个类型Poco,我如何检索实体,因此检查该实体是否可以看到它的元数据,如EntityKeyStoreGeneratedPattern等?

哦 - 顺便说一句......我不知道Poco类型是什么......意思是......班级使用泛型......

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

所以,我以为我将不得不问上下文...抓住我有name == typeof(T).Name或其他的实体...

2 个答案:

答案 0 :(得分:1)

访问映射元数据通常由ObjectContext.MetadataWorkspace执行。 CTP5隐藏ObjectContext实例,并且与映射相关的大多数映射类(基于DbMappingMetadataItem)都是内部的或仅包含内部成员。

您的DbContext似乎是从EDMX自动生成的。在这种情况下你可以做的是通过调用接受DbContext的构造函数来创建ObjectCotnext。在这种情况下,您将可以访问ObjectContext及其所有方法/属性。

你为什么需要它?如果您需要在存储库中执行特殊操作,则应为该类型创建特殊存储库。通用存储库仅适用于非常基本的解决方案。

答案 1 :(得分:0)

如果你有权访问ObjectContext(我认为你必须拥有,因为没有上下文,EntityKey / EntityState没有意义),你可以使用以下

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

从那里,您可以获得各种有趣的属性:http://msdn.microsoft.com/en-us/library/system.data.objects.objectstateentry.aspx

您可能还会发现TryGetObjectStateEntry(...)非常方便。