Skip to content

Instantly share code, notes, and snippets.

@SHSE
Last active December 11, 2015 15:18
Show Gist options
  • Save SHSE/4620069 to your computer and use it in GitHub Desktop.
Save SHSE/4620069 to your computer and use it in GitHub Desktop.
using System;
using System.Collections.Generic;
using System.Linq;
using FluentNHibernate;
using FluentNHibernate.Automapping;
using FluentNHibernate.Cfg;
using FluentNHibernate.Cfg.Db;
using NHibernate.Linq;
using Environment = NHibernate.Cfg.Environment;
namespace ConsoleApplication1 {
internal class Program {
private static void Main(string[] args) {
var persistenceModel = AutoMap.AssemblyOf<Program>(t => t.Name != "Program")
.Override<MappedClass1>(Override)
.Override<MappedClass2>(Override);
var sf = Fluently
.Configure()
.Database(SQLiteConfiguration.Standard.UsingFile("sqlite.db"))
.Mappings(x => x.AutoMappings.Add(persistenceModel))
.ExposeConfiguration(
x => {
x.SetProperty(Environment.Hbm2ddlAuto, "create");
x.SetProperty("show_sql", "true");
x.SetProperty("format_sql", "true");
})
.BuildSessionFactory();
using (var session = sf.OpenSession()) {
var noTableClass1 = new NoTableClass {Name = "One"};
session.Save(new MappedClass1 {Id = Guid.NewGuid(), MyCollectionContext1 = new[] {noTableClass1}});
var noTableClass2 = new NoTableClass {Name = "Two"};
session.Save(new MappedClass2 {Id = Guid.NewGuid(), MyCollectionContext2 = new[] {noTableClass2}});
session.Flush();
}
using (var session = sf.OpenSession()) {
foreach (var obj1 in session.Query<MappedClass1>())
Console.WriteLine(obj1.MyCollectionContext1.First().Name);
foreach (var obj1 in session.Query<MappedClass2>())
Console.WriteLine(obj1.MyCollectionContext2.First().Name);
}
Console.ReadLine();
}
public static void Override(AutoMapping<MappedClass1> mapping) {
mapping.HasMany(Reveal.Member<MappedClass1, IEnumerable<NoTableClass>>("MyCollectionContext1"))
.Component(c => {
c.Map(x => x.Id);
c.Map(x => x.Name);
})
.Table("Table1")
.Cascade.AllDeleteOrphan();
}
public static void Override(AutoMapping<MappedClass2> mapping) {
mapping.HasMany(Reveal.Member<MappedClass2, IEnumerable<NoTableClass>>("MyCollectionContext2"))
.Component(c => {
c.Map(x => x.Id);
c.Map(x => x.Name);
})
.Table("Table2")
.Cascade.AllDeleteOrphan();
}
}
public class NoTableClass {
public virtual Guid Id { get; set; }
public virtual string Name { get; set; }
}
public class MappedClass1 {
public virtual Guid Id { get; set; }
public virtual IEnumerable<NoTableClass> MyCollectionContext1 { get; set; }
}
public class MappedClass2 {
public virtual Guid Id { get; set; }
public virtual IEnumerable<NoTableClass> MyCollectionContext2 { get; set; }
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment