2016-09-05 5 views
1

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äß (Insert/Count/GetList/Delete) außer Get & Update. Ich habe den folgenden Code zusammengefasst. Wenn jemand will, kann ich hierDapper Extension Get & Update gibt Fehler zurück

Meine Produktklasse

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

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

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

Obwohl con.Get<Products> versagt con.GetList<Products>(predicate) funktioniert perfekt. I did follow this link for setup

+0

Können Sie den Code anzeigen für 'con.Get ' und 'con.Update '? – stefankmitph

+2

Die Methoden .Get und .Update sind Erweiterungsmethoden von DapperExtensions. Für ein Update muss DapperExtensions wissen, was die Schlüsseleigenschaft für die Klasse ist. Normalerweise würde es von einer Eigenschaft namens ID oder von einem benutzerdefinierten [mapper] (https://github.com/tmsmith/Dapper-Extensions/wiki/Customized-mapping-for-a-class) –

+0

@GDavison Anyy abgeleitet Beispielcode dafür? – RobinAtTech

Antwort

2

Wenn DapperExtensions keine Schlüsseleigenschaft namens ID aus Ihrer Klasse ableiten kann, müssen Sie eine über eine class mapper 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 Baugruppe wie der Rest Ihres Codes sitzen. Dapper Extensions wird es automatisch aufnehmen. Wenn Sie Ihre Klassen und Dapper Code in separaten Baugruppen haben, können Sie es zu Ihrem Mapper mit der folgenden Zeile zeigen:

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