2

I need to build a class in this form

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

From a table Person that has columns Name and Age.

Are there any ready to use solutions for this?

I know I can implement this with T4 or Codesmith, but there should be somebody who already did it.

1
  • I am shure its possible to generate entity classes with the mentioned technologies. But there should be this little tool out there: You choose the database, give you namespace...and here we go. Soemthing like pureobjects.com/dbCode.aspx,only better. Commented Jul 7, 2009 at 21:42

4 Answers 4

3

I found some nice T4 template I could use. Its from a project on codeplex.

LINQ to SQL templates for T4

The template is hard to read an it took me a while to simplify it. Before you can use it you have to download an include (CSharpDataClasses.tt ) from the project.

Here is my template ():

        <# // 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);#>
Sign up to request clarification or add additional context in comments.

Comments

2

What about Entity Framework?

Comments

2

Or LINQ to SQL, or LLBLGen Pro

Comments

1

Or Subsonic, or NHibernate...

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.