Entity framework 4.1 正在T4中检索列映射信息

Entity framework 4.1 正在T4中检索列映射信息,entity-framework-4.1,mapping,t4,Entity Framework 4.1,Mapping,T4,我正在处理一个T4文件,该文件基于实体模型生成.cs类,我试图获取的内容之一是模型中的映射信息。具体来说,对于模型中的每个字段,我尝试检索它映射到的数据库字段名 我发现映射信息显然存储在StorageMappingItemCollection中,但我不知道如何查询和检索所需的数据。有没有人在这门课上工作过,也许可以提供指导 到目前为止,我的代码是这样的(我已将所有内容粘贴到问题行): 将EDMX文件解析为XML可能比使用StorageMappingItemCollection更容易 使用Lin

我正在处理一个T4文件,该文件基于实体模型生成.cs类,我试图获取的内容之一是模型中的映射信息。具体来说,对于模型中的每个字段,我尝试检索它映射到的数据库字段名

我发现映射信息显然存储在StorageMappingItemCollection中,但我不知道如何查询和检索所需的数据。有没有人在这门课上工作过,也许可以提供指导

到目前为止,我的代码是这样的(我已将所有内容粘贴到问题行):



将EDMX文件解析为XML可能比使用StorageMappingItemCollection更容易

使用Linq到XML解析MSL其实并不难

string mslManifestResourceName = GetMslName(ConfigurationManager.ConnectionStrings["Your Connection String"].ConnectionString);
var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(mslManifestResourceName);
XmlReader xreader = new XmlTextReader(stream);
XDocument doc = XDocument.Load(xreader);
XNamespace xmlns = "http://schemas.microsoft.com/ado/2009/11/mapping/cs";

var items = from entitySetMap in doc.Descendants(xmlns + "EntitySetMapping")
            let entityTypeMap = entitySetMap.Element(xmlns + "EntityTypeMapping")
            let mappingFragment = entityTypeMap.Element(xmlns + "MappingFragment")
            select new
            {
                EntitySet = entitySetMap.Attribute("Name").Value,
                TypeName = entityTypeMap.Attribute("TypeName").Value,
                TableName = mappingFragment.Attribute("StoreEntitySet").Value
            };

这就是我一直担心的。但是使用LINQtoXML这可能没那么糟糕。有什么更新吗?我用的是EF6,也有同样的问题。。。似乎有比解析XML更好的方法。。。
string mslManifestResourceName = GetMslName(ConfigurationManager.ConnectionStrings["Your Connection String"].ConnectionString);
var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(mslManifestResourceName);
XmlReader xreader = new XmlTextReader(stream);
XDocument doc = XDocument.Load(xreader);
XNamespace xmlns = "http://schemas.microsoft.com/ado/2009/11/mapping/cs";

var items = from entitySetMap in doc.Descendants(xmlns + "EntitySetMapping")
            let entityTypeMap = entitySetMap.Element(xmlns + "EntityTypeMapping")
            let mappingFragment = entityTypeMap.Element(xmlns + "MappingFragment")
            select new
            {
                EntitySet = entitySetMap.Attribute("Name").Value,
                TypeName = entityTypeMap.Attribute("TypeName").Value,
                TableName = mappingFragment.Attribute("StoreEntitySet").Value
            };