1

このカスタム リポジトリがあり、クエリを実行しようとすると、例外が返されます。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で本当に必要ですか?

4

2 に答える 2

0

もう 1 つ疑問があります... 私は、すべての列をマップする必要がない EF マッピングに精通しています。Dapperで本当に必要ですか?

dapper contrib と同じ名前を db でコードとして使用するだけではありません。

Table Persons
Id
Name
Birth

Class Persons
Id
Name
Birth

var person = dapper.Get<Persons>(22);
于 2016-09-29T08:14:52.553 に答える