Dapper Extension Get & Update gibt Fehler zurück

dapper dapper-extensions

Frage

Ich habe versucht, mit Dapper Extension & MS Access zu spielen und bis zu einem gewissen Grad erfolgreich. Mein Code ist unten aufgeführt. Alle Funktionen funktionieren ordnungsgemäß (Einfügen / Zählen / GetList / Delete) außer Get & Update. Ich habe den folgenden Code zusammengefasst. Wenn jemand möchte, kann ich den ganzen Code hier einfügen

Meine Produktklasse

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

Und in meiner Hauptklasse. Ich habe versucht, das Produkt zu bekommen und es wie folgt zu aktualisieren. con.Get<Products> -Funktion gibt eine Ausnahme mit der Meldung "Sequenz enthält mehr als ein Element" aus , und con.Update<Products> gibt eine Ausnahme mit "Mindestens eine Schlüsselspalte muss definiert sein" zurück .

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

Auch wenn con.Get<Products> fehlschlägt con.GetList<Products>(predicate) funktioniert einwandfrei. Ich folgte diesem Link für die Einrichtung

Beliebte Antwort

Wenn DapperExtensions keine Schlüsseleigenschaft namens ID aus Ihrer Klasse ableiten kann, müssen Sie diese über einen Klassenmapper explizit angeben. Wenn die Produktnummer der Primärschlüssel in der Datenbank ist, sollte der folgende Beispielklassenmapper die Produktnummer als Primärschlüssel für DapperExtensions festlegen.

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

Diese Klasse kann irgendwo in der gleichen Assembly sitzen wie der Rest Ihres Codes. Dapper Extensions wird es automatisch aufnehmen. Wenn Sie Ihre Klassen und Dapper-Code in separaten Assemblys haben, können Sie es mit der folgenden Zeile auf Ihren Mapper zeigen:

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


Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum