У меня есть это настраиваемое репо, и когда я пытаюсь выполнить запрос, он возвращает исключение Если я выполняю запрос с использованием строки 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<>);
}
}
и вот мое исключение.
Я знаю, что я мог бы сделать все с буквальным запросами, но таким образом я не могу использовать деревья выражений для фильтрации, ни дженерики.
Что я делаю неправильно?
EDIT: 26/05/2015 - 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; }
}
ОБНОВЛЕНИЕ - 31/05/2016 - Sql Profiler
Вот изображение профиля Sql Server, исполненного Sql. Понятно, что символ '*' пропущен.
Я думаю, что это ошибка конфигурации, поэтому здесь есть класс карте
public class TableContratoMap : ClassMapper<TableContrato>
{
public TableContratoMap()
{
// ReSharper disable once RedundantBaseQualifier
base.Table("Contrato");
}
}
Еще одно сомнение ... Я знаком с отображением EF, где не нужно сопоставить каждый столбец. Действительно ли это необходимо в Dapper?
Можете ли вы опубликовать запрос, что он говорит о наличии синтаксической ошибки? Я знаю, что вы говорите, что это динамические запросы, но можете ли вы вывести текст каждого запроса, который он создает? –
Unfortunatelly no ... Я не могу захватить сгенерированный sql-запрос ... Я думал об этом ... так что я мог видеть ошибку sql ... Но это не сработало ... – Jedi31
Не могли бы вы предоставить свой ' Объект TableContrato'?Ваша схема объекта может многое объяснить о проблеме, с которой вы столкнулись –