2

この形式でクラスを作成する必要があります

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

Name列とAge列を持つテーブルPersonから。

このためのすぐに使えるソリューションはありますか?

T4またはCodesmithでこれを実装できることは知っていますが、すでに実行している人がいるはずです。

4

4 に答える 4

3

使用できる素敵なT4テンプレートを見つけました。それはcodeplexのプロジェクトからのものです。

T4用のLINQtoSQLテンプレート

テンプレートは読みづらく、単純化するのに少し時間がかかりました。使用する前に、プロジェクトからインクルード(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);#>
于 2009-07-08T18:32:34.987 に答える
2

Entity Frameworkはどうですか?

于 2009-07-07T21:08:31.690 に答える
2

またはLINQtoSQL、またはLLBLGen Pro

于 2009-07-07T21:08:58.070 に答える
1

または亜音速、またはNHibernate..。

于 2009-07-07T21:15:02.473 に答える