2017-02-02 2 views
0

問題:私はこのテーブルを持っているデータベースでDapperの拡張dbConnection.Get <Object>と

Person 
{ 
    public int PersonId { get; set; } 
    public string Name { get; set; } 
} 

data.Persons 
    Pers_Id 
    Pers_Name 
私は人と呼ばれるモデルを持っているDapperの拡張dbConnection.Get(PERSONID)

カスタムマッピングなしでこれを試してみると、「無効なオブジェクト名 'Person'」というエラーが表示されます。 これはマッピングの問題だと思います。接頭辞 'Pers_'でモデルを完全にマップし、 'data.Persons'を使用すると、 が動作します。

ただし、接頭辞を自動的に割り当てる方法はありますか?私が使用しているデータベースには、さまざまなテーブルがあります。 は別のプリフィックスです。

また、すべてが既にエンティティフレームワークにマップされています。エンティティDbModelBuilder からマップ設定を取得する可能性はありますか?

答えて

2

Dapper-Extensionsは、慣例に基づいています。スキーマの場合は.dboを使用し、主キーの場合はIdを使用します。テーブルが規約と一致しない場合は、custom mappingを作成する必要があります。

connection.Query("select * from foo.table where myId = {myId}", new {myId}) 

アップデート:もう一つの選択肢は、ここCode Generation and T4 Text Templates

で遊ぶことです

がある

public class MyModelMapper : ClassMapper<MyModel> 
{ 
    public MyModelMapper() 
    { 

     //use different table name 
     Table("table_name"); 

     //use a custom schema 
     Schema("not_dbo_schema"); 

     //have a custom primary key 
     Map(x => x.ThePrimaryKey).Key(KeyType.Assigned); 

     //Use a different name property from database column 
     Map(x=> x.Foo).Column("Bar"); 

     //Ignore this property entirely 
     Map(x=> x.SecretDataMan).Ignore(); 

     //optional, map all other columns 
     AutoMap(); 
    } 
} 

代替は、Dapperのを使用して、ちょうどあなたのインラインクエリを記述することです簡単なexample

+0

カスタムマッパーのルールを自動生成または設定する方法はありますか?私はおそらく100のテーブルを持っていると私は多くのマッパーを作成したくない... – doper1234

+0

私は答えを更新します。私はあなたのためにそれを行うだけのことは認識していませんが、独自のコードジェネレータを書くことができます。 –

関連する問題