我試圖找到一種方法,從IEdmEntity到實體框架中的CLR類型。從投射到ObjectContext獲取元數據。我使用DataSpace.OCSpace來訪問映射。我相信這是正確的,但我可能有錯誤的數據空間,DataSpaces在我的頭腦中並不清楚哪些是做什麼的,即使在這個博客http://blogs.msdn.com/b/alexj/archive/2009/04/03/tip-10-understanding-entity-framework-jargon.aspx之後。從IEdmEntity映射到CLR
最後我找回了System.Data.Entity.Core.Mapping.MappingBase對象,這些對象對我來說沒有多大幫助。從調試器看來,我可以訪問我想要的東西,但這些類標記爲內部,我無法投射給他們。
我是不是真的太難了,還是沒有辦法從實體框架中的IEdmModel回到它映射到的CLR類型?
添加代碼,試圖使它更清楚我的工作,並試圖擺脫
public Type GetIEdmEntityTypeToClrType(IEdmEntityTypeReference edmEntityType, DbContext context)
{
var metadata = ((IObjectContextAdapter)context).ObjectContext.MetadataWorkspace;
var fullname = edmEntityType.EntityDefinition().FullName();
EntityType entityType;
if (metadata.TryGetItem(fullname, DataSpace.CSSpace, out entityType))
{
//doesn't hit
}
if (metadata.TryGetItem(fullname, DataSpace.CSpace, out entityType))
{
//hits but can't get access to CLR Type that it's mapped too.
}
if (metadata.TryGetItem(fullname, DataSpace.OCSpace, out entityType))
{
//doesn't hit
}
if (metadata.TryGetItem(fullname, DataSpace.OSpace, out entityType))
{
//doesn't hit
}
if (metadata.TryGetItem(fullname, DataSpace.SSpace, out entityType))
{
//doesn't hit
}
return null;
}
從我的理解是從CLR類到數據庫表列。我想要的是從IEdmEntity轉到CLR類。例如,我的IEdmEntity被稱爲CodeFirst.Customers,但我需要知道它被映射到類ProcessPro.Premier.Entities.Customers。我不需要知道數據庫表/列。 – CharlesNRice
在我的代碼中,您將獲得有關實體對象屬性的CLR信息。第一行代碼中的'entityType'就是你可能需要的東西。 – Andrew
http://msdn.microsoft.com/en-us/library/bb399782%28v=vs.110%29.aspx – Andrew