Y a-t-il un équivalent à "NotMapped" pour Dapper.Net et les extensions Dapper.Net?

dapper micro-orm

Question

J'ai commencé à jouer avec Dapper.Net et je l'aime vraiment jusqu'à présent - cependant, j'ai rencontré un problème.

Dites que j'ai une classe POCO comme:

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string FullName { get { return FirstName + " " + LastName; } }
}

Maintenant, en utilisant Dapper.Net et les extensions Dapper.Net, je veux simplement charger toutes les instances de ce type de données depuis la base de données en procédant comme suit:

string connectionString = CloudConfigurationManager.GetSetting("DBConnection");
using (SqlConnection cn = new SqlConnection(connectionString))
{
    cn.Open();

    IEnumerable<Types.Person> entities = cn.GetList<Types.Person>();
    var forceMe = entities.ToList();
}

Cela fonctionne bien dans la configuration de Linq, mais quand il atteint la ligne avec le En pensant qu'il pourrait respecter les éléments Entity Framework DataAnnotations pour NotMapped, j'ai essayé d'ajouter un attribut NotMapped (après avoir ajouté EF 5 au projet). Cela n'a pas fonctionné.

Donc, la question est, comment puis-je dire à Dapper.Net qu'une colonne ne doit pas être attendue de la base de données? Est-ce un problème avec les extensions, essayant de mapper une colonne de base de données pour tout ce qu'elle voit dans le modèle POCO? Dois-je revenir à l'écriture SQL et demander explicitement les colonnes que je souhaite uniquement ou existe-t-il un moyen d'obtenir un équivalent à NotMapped sur la colonne?

Merci d'avance.

-Adam

Réponse acceptée

Je pense que la seule façon d'ignorer certaines propriétés d'être mappées est d'implémenter un mappeur de classe automatique , où vous pouvez spécifier vos mappages de champs personnalisés. Par exemple:

public class CustomMapper : ClassMapper<Foo>
{
    public CustomMapper()
    {
        Table("FooTable");
        Map(f => f.Id).Column("FooId").Key(KeyType.Identity);
        Map(f => f.DateOfBirth).Column("BirthDate");
        Map(f => f.FirstName).Column("First");
        Map(f => f.LastName).Column("Last");
        Map(f => f.FullName).Ignore();
        Map(f => f.Calculated).ReadOnly();
    }
}

public class Foo
{
    public int Id { get; set; }
    public DateTime DateOfBirth { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string FullName
    {
        get { return string.Format("{0} {1}", FirstName, LastName); }
    }
}

Dans l'exemple ci-dessus, FullName est ignoré.

Le mappeur automatique vous permet également d'ajuster les noms de table, au cas où vos noms de classe POCO ne correspondent pas aux noms de table.

N'oubliez pas que vous devez conserver vos cartes personnalisées dans le même assemblage que vos classes POCO. La bibliothèque utilise la réflexion pour rechercher des cartes personnalisées et ne scanne qu'un seul assemblage.

En espérant que ça aide, bonne chance




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