2009-07-07 4 views
2

Мне нужно построить класс в этом видеГенерировать класс сущностей из таблицы базы данных

namespace BestCompanyEver 
{ 
    public class PersonInfo 
    { 
     public string Name{get;set;} 
     public int Age{get;set;} 
    } 
} 

Из таблицы Person, которая имеет столбцы Имя и возраст.

Есть ли готовые к использованию решения для этого?

Я знаю, что могу реализовать это с помощью T4 или Codesmith, но должен быть кто-то, кто уже это сделал.

+0

Я Shure его можно создавать классы сущностей с указанными технологиями. Но там должен быть этот маленький инструмент: вы выбираете базу данных, даете вам пространство имен ... и здесь мы идем. Soemthing, как http://pureobjects.com/dbCode.aspx, только лучше. –

ответ

3

Я нашел хороший шаблон T4 я мог бы использовать. Это из проекта на Codeplex.

LINQ to SQL templates for T4

Шаблон трудно читать мне потребовалось некоторое время, чтобы упростить его. Прежде чем вы сможете использовать его, вы должны загрузить include (CSharpDataClasses.tt) из проекта.

Вот мой шаблон():

 <# // L2ST4 - LINQ to SQL templates for T4 v0.82 - http://www.codeplex.com/l2st4 
     // Copyright (c) Microsoft Corporation. All rights reserved. 
     // This source code is made available under the terms of the Microsoft Public License (MS-PL) 
     #><#@ template language="C#v3.5" hostspecific="True" 
     #><#@ include file="L2ST4.ttinclude" 
     #><#@ output extension=".generated.cs" 
     #><# // Set options here 
     var options = new { 
      DbmlFileName = Host.TemplateFile.Replace(".tt",".dbml"), // Which DBML file to operate on (same filename as template) 
      SerializeDataContractSP1 = false, // Emit SP1 DataContract serializer attributes 
      FilePerEntity = true, // Put each class into a separate file 
      StoredProcedureConcurrency = false, // Table updates via an SP require @@rowcount to be returned to enable concurrency 
      EntityFilePath = Path.GetDirectoryName(Host.TemplateFile) // Where to put the files 
     }; 
     var code = new CSharpCodeLanguage(); 
     var data = new Data(options.DbmlFileName); 
     var manager = new Manager(Host, GenerationEnvironment, true) { OutputPath = options.EntityFilePath }; 
     data.ContextNamespace = (new string[] { manager.GetCustomToolNamespace(data.DbmlFileName), data.SpecifiedContextNamespace, manager.DefaultProjectNamespace }).FirstOrDefault(s => !String.IsNullOrEmpty(s)); 
     data.EntityNamespace = (new string[] { manager.GetCustomToolNamespace(data.DbmlFileName), data.SpecifiedEntityNamespace, manager.DefaultProjectNamespace }).FirstOrDefault(s => !String.IsNullOrEmpty(s)); 
     manager.StartHeader(); 

     manager.EndHeader(); 
     var tableOperations = new List<TableOperation>(); 
      foreach(var table in data.Tables) 
       tableOperations.AddRange(table.Operations); 
      foreach(Table table in data.Tables) 
       foreach(OperationType operationType in Enum.GetValues(typeof(OperationType))) 
        if (!tableOperations.Any(o => (o.Table == table) && (o.Type == operationType))) {} 
     if (!String.IsNullOrEmpty(data.ContextNamespace)) {} 
     foreach(Table table in data.Tables) { 
      foreach(TableClass class1 in table.Classes) { 
       manager.StartBlock(Path.ChangeExtension(class1.Name + "Info" ,".cs")); 
       if (!String.IsNullOrEmpty(data.EntityNamespace)) {#> 
     using System; 
     using System.Collections.Generic; 
     using System.Linq; 
     using System.Text; 
     namespace <#=data.EntityNamespace#> 
     { 
     <#  } 

     #> <#=code.Format(class1.TypeAttributes)#> class <#=class1.Name#>Info 
      { 

     <#  int dataMemberIndex = 1; 
       if (class1.Columns.Count > 0) { 
     #><#   foreach(Column column in class1.Columns) {#> 
       private <#=code.Format(column.StorageType)#> <#= "_" + char.ToLower(column.Member[0]) + column.Member.Substring(1) #><# if (column.IsReadOnly) {#> = default(<#=code.Format(column.StorageType)#>)<#}#>; 

       <#=code.Format(column.MemberAttributes)#><#=code.Format(column.Type)#> <#=column.Member#> 
       { 
        get { return <#= "_" + char.ToLower(column.Member[0]) + column.Member.Substring(1) #>; } 
        set {<#= "_" + char.ToLower(column.Member[0]) + column.Member.Substring(1) #> = value;} 
       } 

     <#   } 
       } 
     #> 
      } 
     } 
     <#  
       manager.EndBlock(); 
      } 
     } 
     manager.StartFooter(); 
     manager.EndFooter(); 
     manager.Process(options.FilePerEntity);#> 
1

Или Дозвуковые или NHibernate ...

Смежные вопросы