chcę zrobić dokładnie to, co to pytanie pyta: Cascade Saves with Fluent NHibernate AutoMappingKaskada zapisuje z Fluent NHibernate AutoMapping - Stara odpowiedź jest nadal ważna?
Korzystanie Fluent NHibernate mapowania, aby włączyć „kaskady” globalnie raz dla wszystkich klas i typów relacji z zastosowaniem raczej jedno połączenie niż ustawienie go indywidualnie dla każdego odwzorowania.
Odpowiedź na wcześniejsze pytanie wygląda świetnie, ale obawiam się, że interfejs Fluent Nhibernate API zmienił jego składnię .WithConvention w zeszłym roku i złamał odpowiedź ... albo czegoś brakuje.
Dostaję sporo przestrzeni nazw nie wykrył błędy dotyczące IOneToOnePart, IManyToOnePart i wszystkie ich odmiany:
„typu lub obszaru nazwa«IOneToOnePart»nie można odnaleźć (czy brakuje using dyrektywa lub odniesienie do zespołu?) "
Próbowałem oficjalnych dll przykład, dll RTM i najnowszej kompilacji i żaden z nich nie wydaje się, aby VS 2008 zobaczyć wymaganą przestrzeń nazw.
Drugim problemem jest to, że chcę użyć klasy z moim AutoPersistenceModel ale nie jestem pewien, gdzie do tej linii: .ConventionDiscovery.AddFromAssemblyOf() w moim sposobie tworzenia fabryki.
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.
}
Poniżej jest klasa i obsługa oświadczenia Próbuję
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();
}
}
}
Dzięki Tom. To naprawdę proste rozwiązanie. Zdecydowanie mniej kodu niż na swój sposób :-) – Glenn
Cieszę się, że Ci się podoba - na pewno zrobiłem, kiedy zostali mi wskazani na liście mailingowej! Właśnie dokonałem ważnej edycji w sekcji Wiki http://wiki.fluentnhibernate.org/Conventions, aby zwrócić na to uwagę większej liczby osób korzystających z FNH. –