entity-framework-4.1 - 检索 T4 中的列映射信息

标签 entity-framework-4.1 mapping t4

我正在开发一个 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/

相关文章:

c# - Entity Framework - 类似属性的表达

mysql - 使用linq to sql获取数据时超时过期异常

c# - 如何将单个实体映射到多个表

.net - 您如何显示 .Net T4 生成的代码(不是输出)?

entity-framework - EF 4.1 Code First - 自引用外键和其他表的外键

python - 格式化数据的快速查询

javascript - ReactJS 在映射对象数组时传递父属性

asp.net-mvc - 内置的MVC脚手架T4模板在哪里?

node.js - Node.js 的 T4 等效项

entity-framework-4.1 - 停止 DefaultMembershipProvider 的 EF 数据库初始化