Dapper Extension Get & Update renvoie des erreurs

dapper dapper-extensions

Question

J'ai essayé de jouer avec Dapper Extension et MS Access et j'ai réussi jusqu'à un certain point. Mon code est listé ci-dessous. Toutes les fonctions fonctionnent correctement (Insert / Count / GetList / Delete) à l'exception de Get & Update. J'ai résumé le code ci-dessous. Si quelqu'un veut, je peux coller tout le code ici

Ma classe de produit

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

Et dans ma classe principale. J'ai essayé d'obtenir le produit et de le mettre à jour comme ci-dessous. con.Get<Products> renvoie une exception avec le message "Sequence contient plusieurs éléments" et con.Update<Products> renvoie une exception avec "Au moins une colonne Key doit être définie" .

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

Même si con.Get<Products> échoue, con.GetList<Products>(predicate) fonctionne parfaitement. J'ai suivi ce lien pour la configuration

Réponse populaire

Si DapperExtensions ne peut pas déduire une propriété de clé appelée ID de votre classe, vous devrez en spécifier une explicitement via un mappeur de classe . En supposant que le numéro de produit est la clé primaire de la base de données, l'exemple de mappeur de classe suivant doit définir le numéro de produit comme clé primaire pour DapperExtensions.

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

Cette classe peut s'asseoir quelque part dans le même assemblage que le reste de votre code. Dapper Extensions le récupérera automatiquement. Si vous avez vos classes et le code Dapper dans des assemblys séparés, vous pouvez le pointer vers votre mappeur avec la ligne suivante:

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


Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi