voglio fare esattamente ciò che a questa domanda si chiede: Cascade Saves with Fluent NHibernate AutoMappingCascade salva con Fluent NHibernate AutoMapping - Vecchia risposta ancora valida?
Utilizzando Fluent NHibernate Mapping per accendere "a cascata" a livello globale una volta per tutte le classi e tipi di relazione che utilizzano una chiamata piuttosto che impostare per ogni mapping singolarmente.
La risposta alla domanda precedente sembra ottima, ma temo che l'API Fluent Nhibernate abbia modificato la sua sintassi. ConConvention lo scorso anno e abbia rotto la risposta ... o quello o mi manca qualcosa.
continuo a ricevere un po 'di spazio dei nomi non trovato errori relativi alla IOneToOnePart, IManyToOnePart e tutti i loro varianti:
"Il tipo o dello spazio dei nomi il nome 'IOneToOnePart' non è stato trovato (che le manca una direttiva using o un riferimento all'assembly?) "
Ho provato le dll di esempio ufficiali, le dll di RTM e l'ultima build e nessuno di loro sembra che VS 2008 veda lo spazio dei nomi richiesto.
Il secondo problema è che voglio utilizzare la classe con il mio AutoPersistenceModel ma non sono sicuro dove questa linea: .ConventionDiscovery.AddFromAssemblyOf() nel mio metodo di creazione di fabbrica.
private static ISessionFactory CreateSessionFactory()
{
return Fluently.Configure()
.Database(SQLiteConfiguration.Standard.UsingFile(DbFile))
.Mappings(m => m.AutoMappings
.Add(AutoMap.AssemblyOf<Shelf>(type => type.Namespace.EndsWith("Entities"))
.Override<Shelf>(map =>
{
map.HasManyToMany(x => x.Products).Cascade.All();
})
)
)//emd mappings
.ExposeConfiguration(BuildSchema)
.BuildSessionFactory();//finalizes the whole thing to send back.
}
Di seguito le dichiarazioni di classe e utilizzando sto cercando
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using FluentNHibernate.Conventions;
using FluentNHibernate.Cfg;
using FluentNHibernate.Cfg.Db;
using NHibernate;
using NHibernate.Cfg;
using NHibernate.Tool.hbm2ddl;
using FluentNHibernate.Mapping;
namespace TestCode
{
public class CascadeAll : IHasOneConvention, IHasManyConvention, IReferenceConvention
{
public bool Accept(IOneToOnePart target)
{
return true;
}
public void Apply(IOneToOnePart target)
{
target.Cascade.All();
}
public bool Accept(IOneToManyPart target)
{
return true;
}
public void Apply(IOneToManyPart target)
{
target.Cascade.All();
}
public bool Accept(IManyToOnePart target)
{
return true;
}
public void Apply(IManyToOnePart target)
{
target.Cascade.All();
}
}
}
Grazie Tom. Questa è una soluzione davvero facile. Decisamente meno codice del mio modo :-) – Glenn
Sono contento che ti piaccia - Di sicuro l'ho fatto quando mi sono stati segnalati sulla mailing list! Ho appena fatto una modifica importante sulla sezione Wiki http://wiki.fluentnhibernate.org/Conventions per attirare l'attenzione di più persone che usano FNH. –