2016-05-07 1 views
3

奇妙な問題があります。EFs独自のPOCOジェネレータを逆にして両方のテーブルをスキップ

(SSMS 2014からSQLは、私がそう何のタイプミスをするスクリプトを作成していない!)

CREATE TABLE [dbo].[QuestionRangeGroup](
    [QuestionangeID] [int] NOT NULL, 
    [QuestionID] [int] NOT NULL, 
CONSTRAINT [PK_QuestionRangeGroup] PRIMARY KEY CLUSTERED 
(
    [QuestionangeID] ASC, 
    [QuestionID] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

GO 

ALTER TABLE [dbo].[QuestionRangeGroup] WITH CHECK ADD CONSTRAINT [FK_QuestionRangeGroup_Question] FOREIGN KEY([QuestionID]) 
REFERENCES [dbo].[Question] ([ID]) 
GO 

ALTER TABLE [dbo].[QuestionRangeGroup] CHECK CONSTRAINT [FK_QuestionRangeGroup_Question] 
GO 

ALTER TABLE [dbo].[QuestionRangeGroup] WITH CHECK ADD CONSTRAINT [FK_QuestionRangeGroup_QuestionRange] FOREIGN KEY([QuestionangeID]) 
REFERENCES [dbo].[QuestionRange] ([ID]) 
GO 

ALTER TABLE [dbo].[QuestionRangeGroup] CHECK CONSTRAINT [FK_QuestionRangeGroup_QuestionRange] 
GO 

をEFリバースPOCOジェネレータとのEFの両方が、このテーブルをスキップし、データベースからモデルを作成し、生成しない所有し、次の表を考えてみましょうそのためのモデルクラスです。非常に似ている他のカップルがあります。
私は非常に単純な.tt自分自身を関連するクラス(生成されたモデルを利用するための単純なリポジトリ)の束を追加するためにノックしました。

<#@ template language="C#" debug="True" hostspecific="True" #> 
<#@ output extension=".cs" #> 
<#@ assembly name="System.Data" #> 
<#@ assembly name="System.xml" #> 
<#@ import namespace="System.Collections.Generic" #> 
<#@ import namespace="System.Data.SqlClient" #> 
<#@ import namespace="System.Data" #> 
using OsipDal.EF; 
using System.Data.Entity; 
namespace OsipDal.Repositories 
{ 
<# 
    string connectionString = @"data source=DESKTOP-5IHV7AT\SQLEXPRESS;initial catalog=Osip;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework"; 
    SqlConnection con = new SqlConnection(connectionString); 
    con.Open(); 
    DataTable schema = con.GetSchema("Tables"); 

    foreach(DataRow row in schema.Rows) 
    { 
     var tableName = row["TABLE_NAME"].ToString(); 
     var className = string.Format("{0}Repo", tableName.Trim()); 
#> 
    public partial class <#= className #>: RepositoryBase<<#= tableName.Trim() #>> 
    { 
     public <#= className #>(DbContext context) : base(context) 
      { } 
    } 

<# } #> 

} 

これはすべてのテーブルを取得し、すべてのクラスを生成します。明らかにまだ完了していませんが、基本的には機能します。 DBが現在40以上のテーブルになっていて、私が完了する前に倍増する可能性があるので、不満を抱いています。私は、モデル、リポジトリなどを繰り返し作成したいと思います。これは重要なことですが、DBスキーマを取得することはできません。私がDALを作成するのが良い方法であり、テストは私が望むように動作しているからです。DBが私に何をしようとしているかを保証します。達成する。

どのようなアイデアですか?私のDBとDALがもはや困惑しなくなったら、私はGITのハブにそれらを押し込み、世界の遊び/参加を許可します。

先輩にありがとう...

J

+3

このテーブルは、多対多のリンクテーブルのように見えます。 EFはナビゲーションプロパティに変換するため、モデルを生成しません(私は思っています)。 Showは 'Question'と' Questionange'の生成クラスをDbContextに設定しています。 –

+0

あなたは正しいです!私はちょうど私が愚かな古い恐竜であったことを認識し、明らかな間違いを発見しました。今、私のTTファイルに含まれているものを除外するようにSQLを試してみると良いでしょう。プラス、もちろん、この質問を「ラメ」と書いています;-) –

答えて

1

スコットは、私はラメされていた、これに私を打つ、明らかにこれは、リンクテーブルですので、両方のEFとは、それらが含まれていませんでしたPOCOジェネレータは私よりも賢くている逆。

私はちょうど私が何か他のものを探していた間、私は質問を見つけたので、リバースPOCO Generatorで、このパラメータを変更することを検討この答えを追加してい

J

0

:-)再び軌道によfalseに設定ファイル(Database.tt)、あなたはリバースPOCOは、多対多マッピングテーブルを生成する場合:

UseMappingTables = true; // If true, mapping will be used and no mapping tables will be generated. If false, all tables will be generated. 

うまくいけば、それは他の誰かを助けます。

関連する問題