使用T4模板调用Sqlserver链接生成自己的模板

<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ assembly name="Microsoft.CSharp" #>
<#@ assembly name="System.Core" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ assembly name="System.Data" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="System.Data.SqlClient" #>
<#@ import namespace="System.Dynamic" #>
<#@ output extension=".cs" #>
<# 
    var namespaceName="Reap.DAL.Repositories";
    var connectionString = @"data source=xxx;Initial Catalog=xxx;User ID=sa;Password=xx;";   
     using (var db = new SqlConnection (connectionString))
     using (var cmd = db.CreateCommand())
     {
        db.Open();
        var tables= ReadRows (cmd, "SELECT * FROM sys.tables WHERE NAME<>'__MigrationHistory'").ToArray();
#>
using Reap.Models.Models;
using Reap.IDAL.Repositories;
using Reap.DAL.UnitOfWork;
namespace <#=namespaceName#>{
  <#
        foreach (var table in tables)
        {         
  #>
     public class I<#=table.name#>Repository:EFRepositoryBase<<#=table.name#>>,I<#=table.name#>Repository{
        }
  <#
     }
     }
  #>
  }
  <#+
   static IEnumerable<dynamic> ReadRows (SqlCommand command, string sql)
     {
        command.CommandText = sql ?? "";

        using (var reader = command.ExecuteReader())
        {
           while (reader.Read())
           {
              var dyn = new ExpandoObject ();
              IDictionary<string, object> dic = dyn;

              for (var iter = 0; iter < reader.FieldCount; ++iter)
              {
                    dic[reader.GetName(iter) ?? ""] = reader.GetValue(iter);
              }
              yield return dyn;
           }
        }
     }
  #>

 

posted on 2014-08-13 11:18  ~紫鱼~  阅读(799)  评论(0编辑  收藏  举报