我正在开发一个 T4 文件,该文件根据实体模型生成 .cs 类,我想要获取的内容之一是模型中的映射信息。具体来说,对于模型中的每个字段,我尝试检索它映射到的数据库字段名称。
我发现映射信息显然存储在 StorageMappingItemCollection 中,但我很难弄清楚如何查询它并检索我需要的数据。有人参加过这个类(class)并且可以提供指导吗?
到目前为止,我的代码是这样的(我已将所有内容粘贴到有问题的行):
<#
System.Diagnostics.Debugger.Launch();
System.Diagnostics.Debugger.Break();
#>
<#@ template language="C#" debug="true" hostspecific="true"#>
<#@ include file="EF.Utility.CS.ttinclude"#>
<#@ output extension=".cs"#><#
CodeGenerationTools code = new CodeGenerationTools(this);
MetadataLoader loader = new MetadataLoader(this);
CodeRegion region = new CodeRegion(this, 1);
MetadataTools ef = new MetadataTools(this);
string inputFile = @"MyModel.edmx";
EdmItemCollection ItemCollection = loader.CreateEdmItemCollection(inputFile);
StoreItemCollection storeItemCollection = null;
loader.TryCreateStoreItemCollection(inputFile, out storeItemCollection);
StorageMappingItemCollection storageMappingItemCollection = null;
loader.TryCreateStorageMappingItemCollection(
inputFile, ItemCollection, storeItemCollection, out storageMappingItemCollection);
var item = storageMappingItemCollection.First();
storageMappingItemCollection 具有 GetItem() 等方法,但我一生都无法让它返回我知道模型中存在的字段的数据。
提前致谢!
最佳答案
使用 Linq to 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
};
关于entity-framework-4.1 - 检索 T4 中的列映射信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12098739/