Den folgenden Beispielcode als Kontext verwenden ... Wenn ich diese Abfrage ausführe, bekomme ich das 'Id'-Feld, das als Standardwert zurückkommt (was 0 für ein int ist). Ich möchte dapper sagen, dass es so ausgeführt wird, dass es eine Ausnahme auslöst, wenn eine Spalte in der Ergebnismenge nicht einer Eigenschaft meines Ergebnisobjekts zugeordnet wird. (Ich verstehe, dass das Problem nur darin besteht, dass ich das zusätzliche 'd' in der SQL-Abfrage entfernen muss, aber ich bin daran interessiert, dass dies sich mehr explizit herausstellt)
Ich konnte nichts zu diesem Thema finden. Bitte lassen Sie mich wissen, ob dies mit Dapper überhaupt möglich ist.
Vielen Dank im Voraus (abgesehen von dieser Ausgabe, und für jeden, der nicht den Sprung gewagt hat, ist Dapper wirklich das Größte seit geschnittenem Brot!).
class CustomerRecord
{
public int Id { get; set; }
public string Name { get; set; }
}
CustomerRecord[] GetCustomerRecords()
{
CustomerRecord[] ret;
var sql = @"SELECT
CustomerRecordId AS Idd,
CustomerName as Name
FROM CustomerRecord";
using (var connection = new SqlConnection(this.connectionString))
{
ret = connection.Query<CustomerRecord>(sql).ToArray();
}
return ret;
}
Sie könnten Ihre eigene DefaultTypeMap
erstellen, in der Sie Dapper's DefaultTypeMap
und eine Ausnahme DefaultTypeMap
, wenn das Member nicht gefunden werden kann:
public class ThrowWhenNullTypeMap<T> : SqlMapper.ITypeMap
{
private readonly SqlMapper.ITypeMap _defaultTypeMap = new DefaultTypeMap(typeof(T));
public ConstructorInfo FindConstructor(string[] names, Type[] types)
{
return _defaultTypeMap.FindConstructor(names, types);
}
public ConstructorInfo FindExplicitConstructor()
{
return _defaultTypeMap.FindExplicitConstructor();
}
public SqlMapper.IMemberMap GetConstructorParameter(ConstructorInfo constructor, string columnName)
{
return _defaultTypeMap.GetConstructorParameter(constructor, columnName);
}
public SqlMapper.IMemberMap GetMember(string columnName)
{
var member = _defaultTypeMap.GetMember(columnName);
if (member == null)
{
throw new Exception();
}
return member;
}
}
Der Nachteil davon ist, dass Sie alle Typenmaps für jede Entität konfigurieren müssen:
SqlMapper.SetTypeMap(typeof(CustomerRecord), typeof(ThrowWhenNullTypeMap<CustomerRecord>));
Dies könnte jedoch durch Reflexion konfiguriert werden.