Last active
December 11, 2015 15:18
-
-
Save SHSE/4620069 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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