Dapper Extension Get & Update devuelve errores

dapper dapper-extensions

Pregunta

Traté de jugar con Dapper Extension & MS Access y tuve éxito hasta cierto punto. Mi código está en la lista a continuación. Todas las funciones funcionan correctamente (Insert / Count / GetList / Delete) excepto Get & Update. He resumido el código a continuación. Si alguien quiere puedo pegar todo el código aquí

Mi clase de productos

public class Products
{
    public string ProductNumber { get; set; }
    public string Description { get; set; }
}

Y en mi clase principal. Traté de obtener el producto y actualizarlo de la siguiente manera. con.Get<Products> devuelve una excepción con el mensaje "La secuencia contiene más de un elemento" y con.Update<Products> devuelve una excepción con "Se debe definir al menos una columna de clave" .

        using (var con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb"))
        {

            string ProductNumber = "12";
            var product4 = con.Get<Products>(ProductNumber);
            product4.ProductNumber = "Baz";
            con.Update<Products>(product4);   

            Console.ReadLine();
        }

Aunque con.Get<Products> falla con.GetList<Products>(predicate) funciona perfectamente. Seguí este enlace para la configuración

Respuesta popular

Si DapperExtensions no puede inferir una propiedad clave llamada ID de su clase, deberá especificarla explícitamente a través de un mapeador de clases . Suponiendo que ProductNumber es la clave principal en la base de datos, el siguiente mapeador de clase de ejemplo debe establecer ProductNumber para que sea la clave principal para DapperExtensions.

using Dapper;   
using DapperExtensions;
using DapperExtensions.Mapper;
public class ProductsMapper : ClassMapper<Products>
{
    public ProductsMapper()
    {
        Map(x => x.ProductNumber).Key(KeyType.Assigned);
        AutoMap();
    }
}

Esta clase puede ubicarse en algún lugar dentro del mismo ensamblaje que el resto de su código. Dapper Extensions lo recogerá automáticamente. Si tiene sus clases y el código Dapper en ensamblajes separados, puede apuntarlo a su asignador con la siguiente línea:

DapperExtensions.DapperExtensions.SetMappingAssemblies({ typeof(ProductsMapper).Assembly })


Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué