2

J'ai essayé à peu près tout pour que les mappages M: M fonctionnent dans l'architecture S # arp. Malheureusement, le projet d'exemple Northwind n'a pas de priorité M: M.S # arp Architecture Les remplacements de correspondance plusieurs-à-plusieurs ne fonctionnent pas

Tout a bien fonctionné dans mon projet avant de passer à S # arp et à son choix de mappage Auto Fluent NHibernate. J'aime l'auto-mapping, c'est bien, mais les overrides ne semblent pas s'enregistrer.

Tout semble fonctionner en mémoire et dans les tests, cependant, lors de la validation de données dans une base de données, rien n'est inséré dans ma table de référence M: M. Si nous prenons l'échantillon simple d'une catégorie peut avoir plusieurs produits et un produit peut être dans plusieurs catégories, nous aurions une table appelée CategoryProduct (je n'aime pas la pluralisation) qui a des colonnes Category_id et Product_id.

modèle de persistance Mon Auto génère en tant que tel:

return AutoPersistenceModel 
    .MapEntitiesFromAssemblyOf<Category>() 
    .Where(GetAutoMappingFilter) 
    .ConventionDiscovery.Setup(GetConventions()) 
    .WithSetup(GetSetup()) 
    .UseOverridesFromAssemblyOf<AutoPersistenceModelGenerator>(); 

override Mapping pour la catégorie ressemble par exemple:

public class CategoryMap : IAutoMappingOverride<Category> 
{ 
    public void Override(AutoMap<Category> mapping) 
    { 
     mapping.Id(x => x.Id, "Id") 
      .WithUnsavedValue(0) 
      .GeneratedBy.Identity(); 

     mapping.Map(x => x.Name).WithLengthOf(50); 

     mapping.Map(x => x.Depth); 

     mapping.HasMany<Category>(x => x.Children) 
      .Cascade.All() 
      .KeyColumnNames.Add("Parent_id") 
      .AsBag() 
      .LazyLoad(); 

     mapping.HasManyToMany<Posting>(x => x.Products) 
      .WithTableName("CategoryProduct") 
      .WithParentKeyColumn("Category_id") 
      .WithChildKeyColumn("Product_id") 
      .Cascade.All() 
      .AsBag(); 
    } 
} 

Et le produit a une substitution de la cartographie en tant que tel:

public class ProductMap : IAutoMappingOverride<Product> 
{ 
    public void Override(AutoMap<Product> mapping) 
    { 
     mapping.Id(x => x.Id, "Id") 
      .WithUnsavedValue(0) 
      .GeneratedBy.Identity(); 

     mapping.Map(x => x.Title).WithLengthOf(100); 
     mapping.Map(x => x.Price); 
     mapping.Map(x => x.Description).CustomSqlTypeIs("Text"); 
     mapping.References(x => x.Category).Cascade.All(); 

     mapping.HasMany<ProductImage>(x => x.Images).Inverse().Cascade.All().LazyLoad(); 

     mapping.HasManyToMany<Category>(x => x.Categories) 
      .WithTableName("CategoryProduct") 
      .WithParentKeyColumn("Product_id") 
      .WithChildKeyColumn("Category_id") 
      .Inverse() 
      .AsBag(); 
    } 
} 

J'ai essayé de nombreuses combinaisons de structuration des mappages M: M, mais rien ne fonctionne.

Cette article a suggéré de re-compiler S # arp avec la mise à jour FHN, j'ai essayé ceci cependant le dernier code FHN est très différent de celui utilisé par S # arp il semblerait. Correction de tous les conflits de rupture, mais cela ne fonctionne toujours pas.

Espérons que quelqu'un d'autre a rencontré et résolu des problèmes de substitution automatique M: M avec S # arp.

+0

Les remplacements sont-ils exécutés (si vous insérez des points d'arrêt dans les méthodes de remplacement - ces points d'arrêt sont-ils atteints?)? Pouvez-vous poster un code qui enregistre le produit/la catégorie? – maciejkow

Répondre

1

Géré pour résoudre le problème, s'est avéré être une erreur S # arp débutants.

Pour que des données ManyToMany soient enregistrées, la méthode du contrôleur doit être affectée à l'attribut [Transaction].

Questions connexes