Dapper Extension Get & Update restituisce errori

dapper dapper-extensions

Domanda

Ho provato a giocare con Dapper Extension e MS Access e sono riuscito fino a un certo punto. Il mio codice è elencato di seguito. Tutte le funzioni funzionano correttamente (Insert / Count / GetList / Delete) tranne Get & Update. Ho riassunto il codice qui sotto. Se qualcuno vuole, posso incollare tutto il codice qui

La mia classe di prodotto

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

E nella mia classe principale. Ho provato ad ottenere il prodotto e ad aggiornarlo come di seguito. con.Get<Products> restituisce un'eccezione con il messaggio "Sequenza contiene più di un elemento" e con.Update<Products> restituisce un'eccezione con "Almeno una colonna chiave deve essere definita" .

        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();
        }

Anche se con.Get<Products> fallisce con.GetList<Products>(predicate) funziona perfettamente. Ho seguito questo link per l'installazione

Risposta popolare

Se DapperExtensions non può dedurre una proprietà chiave chiamata ID dalla classe, è necessario specificarne esplicitamente una tramite un mapper di classe . Supponendo che ProductNumber sia la chiave primaria nel database, il seguente programma di definizione della classe di esempio dovrebbe impostare ProductNumber come chiave primaria per DapperExtensions.

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

Questa classe può essere collocata da qualche parte all'interno dello stesso assembly del resto del codice. Le estensioni di Dapper la raccoglieranno automaticamente. Se hai classi e codice Dapper in gruppi separati, puoi puntarlo sul tuo mapper con la seguente riga:

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


Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché