2010-03-26 4 views
2

Je suis un n00b. Voici ce que je veux faire:AutoMapping avec FluentMapping ne semble pas fonctionner pour moi

Utilisez AutoMapping pour configurer chaque propriété entre le modèle -> table. Ensuite, je voudrais remplacer 2 éléments spécifiques dans une carte fluide. Les deux éléments sont les suivants: Id & Nom de la table.

Alors mes cartes ressemblent à ceci:

public class BillMasterMap : ClassMap<BillMaster> 
{ 
    public BillMasterMap() 
    { 
     Table("BILLMAST"); 
     Id(x => x.SYSKEY); 
    } 
} 

Et mes réglages d'usine ressembler à ceci:

public static ISessionFactory SessionFactory(string connectionString) 
    { 
     if (_sessionFactory == null) 
     { 
      _sessionFactory = Fluently.Configure() 
       .Database(MsSqlConfiguration.MsSql2005.ShowSql() 
         .ConnectionString(c => c.Is(connectionString)).Cache(c => c.UseQueryCache().ProviderClass<HashtableCacheProvider>())) 
       .Mappings(m => 
        m.AutoMappings.Add(AutoMap.AssemblyOf<BillMaster>() 
           .Where(x => x.Namespace.EndsWith("Entities")))) 
       .Mappings(m => 
        m.FluentMappings.AddFromAssemblyOf<BillInvoiceMap>()) 
       .BuildSessionFactory(); 
     } 

     return _sessionFactory; 
    } 

Le problème est que FNH trouve la commande prioritaire Id pour BillMaster, mais pas pour BillInvoice qui ressemble à ceci (identique il semble)

public class BillInvoiceMap : ClassMap<BillInvoice> 
{ 
    public BillInvoiceMap() 
    { 
     Id(x => x.SYSKEY); 
     Table("BILLINV"); 
    } 
} 

J'ai contourné le problème en configurant mon AutoMapping avec la configuration() comme indiqué ci-dessous:

.Mappings(m => 
        m.AutoMappings.Add(AutoMap.AssemblyOf<BillMaster>() 
           .Setup(s => s.FindIdentity = property => property.Name == "SYSKEY")    
           .Where(x => x.Namespace.EndsWith("Entities")))) 

Mais je voudrais combiner auto & couramment que d'autres tables ne pas utiliser « SYSKEY » comme colonne Id.

Pensées? Est-ce un bug de FNH?

Répondre

0

J'ai commencé à travailler.

1.) Je dois AutoMapping de configuration avec la méthode de configuration I décrit ci-dessus 2.) En outre, je dois fluentmappings de configuration avec la méthode Id

lorsque les deux sont configurés comme ça, alors ça marche pour moi.

Alors

public static ISessionFactory SessionFactory(string connectionString) 
    { 
     if (_sessionFactory == null) 
     { 
      _sessionFactory = Fluently.Configure() 
       .Database(MsSqlConfiguration.MsSql2005.ShowSql() 
           .ConnectionString(c => c.Is(connectionString)).Cache(
           c => c.UseQueryCache().ProviderClass<HashtableCacheProvider>())) 
       .Mappings(m => 
           { 
            m.FluentMappings.AddFromAssemblyOf<BaseEntity>(); 
            m.AutoMappings.Add(AutoMap.AssemblyOf<BaseEntity>() 
                 .Setup(s => s.FindIdentity = property => property.Name == "SYSKEY") 
                 .Where(x => x.Namespace.EndsWith("Entities"))); 

           }) 
       .BuildSessionFactory(); 
     } 

     return _sessionFactory; 
    } 

Et la carte

public class BillInvoiceMap : ClassMap<BillInvoice> 
{ 
    public BillInvoiceMap() 
    { 
     Table("BILLINV"); 
     Id(x => x.SYSKEY); 
    } 
} 
Questions connexes