このカスタム リポジトリがあり、クエリを実行しようとすると、例外が返されます。SQL 文字列を使用してクエリを実行すると、エラーは返されませんが、拡張機能を使用すると、この例外が発生します。
このような:
public override IEnumerable<TableContrato> All()
{
//var query = "select * from Contrato";
//var data = Conn.Query<TableContrato>(query);
var data = Conn.GetList<TableContrato>();
return data;
}
私のすべてのエンティティは、のような「テーブル」プレフィックスを使用してC#で作成されTableContrato
、私のテーブルは呼び出されますContrato
このようにして、このようなカスタム マッパーを作成しました。
public class CustomMapper<TTableEntity> : PluralizedAutoClassMapper<TTableEntity> where TTableEntity : class
{
public override void Table(string tableName)
{
tableName = tableName.Replace("Table", string.Empty).Trim();
base.Table(tableName);
}
}
これが私のレポベースです
public abstract class ReadOnlyRepositoryBase<TEntity, TTable, TKey> : IReadOnlyRepository<TEntity, TKey>
where TEntity : class where TTable : class
{
protected IDbConnection Conn { get; set; }
protected DapperContext Context { get; private set; }
protected ReadOnlyRepositoryBase()
{
Context = new DapperContext();
Conn = Context.Connection;
InicializaMappings();
}
public void InicializaMappings()
{
global::DapperExtensions.DapperExtensions.DefaultMapper = typeof(CustomMapper<>);
}
}
ここに私の例外があります。
リテラル クエリですべてを実行できることはわかっていますが、この方法では、式ツリーをフィルター処理に使用することも、ジェネリックも使用することもできません。
私が間違っていることは何ですか?
編集: 2015 年 5 月 26 日 - TableContrato
public class TableContrato
{
public Guid ContratoId { get; set; }
public Guid EmpresaId { get; set; }
public string ContratoNome { get; set; }
public string ContratoCodigo { get; set; }
public DateTime? DataDeCriacao { get; set; }
public Guid? UsuarioQueCriou { get; set; }
public TableEmpresaGrupo Empresa { get; set; }
public virtual ICollection<TableLocal> Locais { get; set; }
}
更新 - 2016 年 5 月 31 日 - SQL プロファイラー
これは、実行された Sql の Sql サーバー プロファイルのイメージです。明らかに、「*」文字が抜けています。
構成エラーだと思うので、ここにマップクラスがあります
public class TableContratoMap : ClassMapper<TableContrato>
{
public TableContratoMap()
{
// ReSharper disable once RedundantBaseQualifier
base.Table("Contrato");
}
}
もう 1 つ疑問があります... 私は、すべての列をマップする必要がない EF マッピングに精通しています。Dapperで本当に必要ですか?