生成类似于EF tt文件的类文件

时间:2017-06-20 12:03:12

标签: c# entity-framework

我想阅读以下格式的文件的特定部分并生成类,我打算首先使用EF代码生成适当的DB结构和种子数据。该文件有点.txt文件,文本安静相似编码C#的风格。

以下是文本文件中的示例文本:

    //PVT
    var PVT1 = new DEMO("DEMO_Ex");
    PVT1.type= "St";
    PVT1.hObj= "None";
    PVT1.wCur= "None";

var PVT2 = new DEMO("default pvt object");
  PVT2.ty ="DemoProperties";
  PVT2.hyObj = "None";
  PVT2.wCur = "None";
  PVT2.Pref = 101;


var STDVOLUME1 = new DEMO_Sample();
  STDVOLUME1.stdardP = 105;
  STDVOLUME1.stdardT = 28.706;

//OPTIONS
var OPT1 = new DEMO_OPT("OPT1");
  OPT1.tempCalc   = "YES";
  OPT1.hTransfer               = "DYNAMIC";
  OPT1.fWall                   = "NO";
  OPT1.feWall               = "NO";

//NUMs
var NUM1 = new DEMO_NUM("NUM1");
  NUM1.tAdv      = 1;
  NUM1.cf        = [1.9];

1 个答案:

答案 0 :(得分:0)

好的,你正在寻找的是T4模板,它在visual studio中得到了完全支持。右键单击您的项目,添加 - >搜索框中的新项目键入t4,然后选择文本模板,而不是运行时文本模板。现在你必须学习如何编写T4模板,因为它超出了这个小消息框。 它们并不难写,我相信我曾经使用它们从json文件中生成一个静态类,从那以后我从未使用它们花了几个小时。

下面是一个示例t4,它读取一个json文件并输出一个简单的部分类,我有另一个包含代码的部分来完成该类,但是这个示例向您展示了一些您需要的东西,比如调用c#用于处理文件,循环和生成文本的代码,在查看此内容时,请记住不在< ##>中的任何内容刚刚被放到生成的文件

<#@ template debug="false" hostspecific="true" language="C#" #>
<#@ assembly name="System.Core" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="System.ComponentModel" #>
<#@ import namespace="System.IO" #>
<#@ assembly name="$(SolutionDir)packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll" #>
<#@ import namespace="Newtonsoft.Json.Linq" #>
<#@ output extension=".cs" #>
<#
var file = this.Host.ResolvePath(@"sport_name_map.json");
var json = JObject.Parse(File.ReadAllText(file));
#>
// This is an automatically generated file, based on settings.json and PackageSettingsGen.tt
/* settings.json content:
<#@ include file="sport_name_map.json" #>
*/

using System.Collections.Generic;

namespace SportMapper
{
    public partial class SportNameMapper
    {
        internal Dictionary<string,object> mapping = new Dictionary<string, object>();
        public SportNameMapper()
        {
        <#
                foreach (var j in json["mapping"].Children()) 
                {
                    var from = j["map_from"].ToString();
                    var to = j["map_to"].ToString();
                    var id = j["sdrm_id"].ToString();
            #>
            mapping.Add("<#= from #>", new {To = "<#= to #>", Id = "<#= id #>"});
            <#
                }
            #>
        }
    }   
}