2010-06-11 6 views
1

Quelle serait la meilleure façon de mettre en œuvre un narguent fluent concernant l'architecture du projet?Fluent nhibernate - Numéro de conception

J'ai deux projets en ce moment un pour la couche de domaine et l'autre est la couche de persistance. Mon problème est que lorsque j'essaie de configurer nhibernate, je reçois une référence circulaire.

Le domaine fait référence à la couche de persistance mais comment faire pour que la configuration fonctionne sans avoir à référencer le domaine dans la couche de persistance, c'est-à-dire la classe de produit dans cette ligne AddFromAssemblyOf()?

Actuellement, ma configuration est comme celle-ci.

return Fluently.Configure() 
       .Database(MsSqlConfiguration.MsSql2008.ConnectionString(c =>   c.FromConnectionStringWithKey("DisillStoreConnectionString"))) 
       .Mappings(m => m.FluentMappings.AddFromAssemblyOf<Product>())) 
       .BuildSessionFactory(); 
+0

Je ne vois pas vraiment pourquoi votre projet de domaine devrait faire référence au projet de persistance ... Voulez-vous élaborer? –

+0

Salut Tomas, j'ai une référence au projet de persistance du projet de domaine afin que je puisse récupérer des données via le dépôt-à-dire quelque chose comme ceci: IEnumerable publique GetProductsByID (Id int) { genericRepository.Get (id) ; } Est-ce un défaut de conception? Existe-t-il de meilleurs moyens de mettre en œuvre le modèle de domaine et de fluencer-nhibernate? Est-ce – ctb

Répondre

1

Vous voulez que votre classe Fluent config dans votre projet de persistance avec vos ClassMap classes, pas vos modèles de domaine. En utilisant votre exemple de code, vous voudrez AddFromAssemblyOf sur votre classe Map et non sur votre classe Model. Voir:

return Fluently.Configure() 
       .Database(MsSqlConfiguration.MsSql2008.ConnectionString(
       c => 
        c.FromConnectionStringWithKey("DisillStoreConnectionString"))) 
       .Mappings(m => m.FluentMappings.AddFromAssemblyOf<ProductMap>())) 
       .BuildSessionFactory(); 

De cette façon, votre projet de domaine n'a pas besoin de référencer votre projet de persistance.

+0

JMP, merci pour la réponse. N'auriez-vous pas le même problème que le produit de référence ProductMap (modèle)? public class ProductMap: ClassMap Comment remplir l'objet de domaine sans faire référence à la couche de persistance de votre couche de domaine? – ctb

+0

Vos objets de domaine devront être marqués public dans leur propre assembly. De plus, vos objets de domaine ne se peupleront pas, nHibernate les peuplera en fonction des informations qu'il recevra de votre classe de configuration. Le projet de domaine n'a pas besoin de référencer votre projet de persistance. – JMP

+0

JMP, Merci, ça efface les choses. – ctb