2012-04-13 24 views
3

私はゲッターとセッターでモデルクラスを作成したいデータベースをデータベースに持っています。私のプロジェクトのタスクのほとんどは、私はPetaPocoを使用しています。手動でモデルを作成しましたが、多くの表には多くの列があります。PetaPocoライブラリを使用してデータベースからモデルを自動的に作成する方法は?

PetaPocoを使用してデータベースからモデルを作成する方法はありますか?

+1

t4テンプレートからペタポコはできません? – wiero

答えて

4

PetaPocoには、これを行うT4 Visual Studioテンプレートがあります。それらをすべて生成したくない場合は、テンプレートを使用して、結果として得られる* .csファイルからクラスをコピーしてください。

PetaPoco's GitHub code repoにテンプレートがあります。プロジェクトにテンプレートを追加する

は、2つの方法で行うことができます

  1. は、パッケージコンソールまたはVisual Studioのパッケージマネージャを使用してNuGetを使用してファイルを手動で
  2. をコピーします。詳細on NuGet site

パッケージが存在しない場合(CVSの一部)に自動ダウンロードするように設定できるので、2番目のオプションをお勧めします。

+0

私はDALを生成したDatabase.ttを使用しました。そのリストから、テーブル用のクラスを作成するために使用するのはどれですか? – RKh

+0

@RPK:そのリストから何を意味するのですか?どのようなリスト?デフォルトでは、データベースクラスとスキーマクラスが生成されます。私の知る限り。手動のPOCOを自分で作成しますが、テンプレートをすばやく見ることで、テーブルクラスを生成し、生成された 'Database.cs'ファイルに格納する必要があります。 –

+0

リストでは、あなたが私に与えたリンクに表示されている.ttを意味します。手動でPOCOを書くこともできますが、T4を使って追加したいと思います。どのT4テンプレートを実行するのですか?既存のPOCOを妨害しますか? – RKh

5

T4テンプレートを使用することを強くお勧めします.T4テンプレートを使用すると、処理が大幅に高速化され、機能が追加されるようになります。

PM>install-package petapoco 

最速の方法は、「パッケージマネージャコンソール」([ツール]> [ライブラリパッケージマネージャ]> [パッケージマネージャコンソール)を開き、プロジェクトをドロップダウンして実行し、「デフォルトのプロジェクト」で選択されていることを確認することです

"Models"というフォルダと "Generated"というサブフォルダが作成されます。 「Generated」フォルダで、「Database.tt」ファイルを開き、情報を設定します。これを設定する方法については、http://www.toptensoftware.com/petapoco/を参照してください。

T4テンプレートを正常にセットアップすると、データベース内のすべてのオブジェクトを含む "Database.cs"というコードファイルが生成されます。生成されるのは「部分クラス」です。ここの鍵はです。このファイル内のオブジェクトは変更しないでください。代わりに、新しい部分クラスを同じ名前空間に作成し、より多くのロジックを実装することができます。既存のオブジェクトを移動/更新して、新しい設定を確認します。

もう1つのオプションは、いくつかのコードを生成するためにTSQLを作成することです。ここでは非常に粗い私は過去に私のPetaPocoテーブル用のインターフェースを生成するために使ったことの例です。

declare @script nvarchar(max); 
declare @table nvarchar(256); 

set @table = 'YourTableName' 

set @script = 'public interface I' + @table + '{' + char(10); 
SELECT 
    @script = @script + 
     CASE 
      WHEN st.Name IN ('int') AND c.is_nullable = 0 THEN 'int' 
      WHEN st.name in ('smallint') AND c.is_nullable = 0 THEN 'short' 
      WHEN st.name IN ('bigint') AND c.is_nullable = 0 THEN 'long' 
      WHEN st.name IN ('varchar','nvarchar','sysname') THEN 'string' 
      WHEN st.Name IN ('datetime') AND c.is_nullable = 0 THEN 'DateTime' 
      WHEN st.Name IN ('bit') AND c.is_nullable = 0 THEN 'bool' 
      WHEN st.Name IN ('decimal') AND c.is_nullable = 0 THEN 'decimal' 
      /* NULLABLE VALUES */ 
      WHEN st.Name IN ('int') AND c.is_nullable = 1 THEN 'int?' 
      WHEN st.name in ('smallint') AND c.is_nullable = 1 THEN 'short?' 
      WHEN st.name IN ('bigint') AND c.is_nullable = 1 THEN 'long?' 
      WHEN st.name IN ('varchar','nvarchar','sysname') AND c.is_nullable = 1 THEN 'string?' 
      WHEN st.Name IN ('datetime') AND c.is_nullable = 1 THEN 'DateTime?' 
      WHEN st.Name IN ('bit') AND c.is_nullable = 1 THEN 'bool?' 
      WHEN st.Name IN ('decimal') AND c.is_nullable = 1 THEN 'decimal?' 
      --WHEN st.name IN('sysname') AND c.is_nullable = 1 THEN 'string?'  
      ELSE 'UNKOWN-' + st.name 
     END 
    + ' ' + c.name + '{get;set;}' + char(10) 
FROM sys.tables t 
INNER JOIN sys.columns c 
ON t.object_id = c.object_id 
INNER JOIN sys.types st 
ON st.system_type_id = c.system_type_id 
WHERE t.name = @table 

print @script + '}' 

これが役立ちます。

+0

Thanx on TSQLなぜFLOAT型の実装がSQLにないのか、FLOATを忘れたのか他の理由があるのでしょうか? – adopilot

+0

喜んで助けてください。これはDBから情報を抽出する方法の素早く汚れた例でした。これを達成するには、ロジックに別の条件を追加するだけで済みます。 – anAgent

0

Visual Studioでは、統合エンティティフレームワークの「データベースからコードを最初に作成」機能を使用して、PetaPocoで使用するPOCOクラスを生成できます。それらを生成し、DBContextや属性のような不要なEFゴミをすべて削除してください。こうすることで、C#だけでなく、VB.NETとそのすべての視覚的なクリックでも、P4Oを生成することができます.T4テンプレートを使用しないでください。

プロジェクト/新規アイテムの追加... /データ/ ADO。NETエンティティデータモデル/コードデータベースから最初

関連する問題