之前在使用NHibernate一支都是使用的xml文件作品映射配置文件。最近在来看NHibernate的时候发现可以使用ConfORM 来代替手动编写xml文件。但是网上查了很多的资料,实在是不明白应该如何来些这个配置代码。是不是要得为每一个实体单独写一个类来实现自动映射功能吗。哪位大哥能给个实例代码么。邮箱1092345360@qq.com。
看了有一个实例,有点不太明白如何运用在多实体下面。代码如下。
using System; using System.IO; using ConfOrm; using ConfOrm.NH; using NHibernate.Cfg.MappingSchema; using NHibernate.Tool.hbm2ddl; namespace YJingLee.TryConfOrm { class Program { public static ObjectRelationalMapper GetMappedDomain() { var orm = new ObjectRelationalMapper(); orm.TablePerClass<Domain>(); return orm; } public static HbmMapping GetMapping() { var orm = new ObjectRelationalMapper(); orm.TablePerClass<Domain>(); var mapper = new Mapper(orm); return mapper.CompileMappingFor(new[] { typeof(Domain) }); } public static void ShowXmlMapping() { var document = CreateXmlMappings.Serialize(GetMapping()); File.WriteAllText("MyMapping.hbm.xml", document); Console.Write(document); } public static void JustForConfOrm() { //配置NHibernate var conf = NhConfig.ConfigureNHibernate(); //在Configuration中添加HbmMapping conf.AddDeserializedMapping(GetMapping(), "Domain"); //配置数据库架构元数据 SchemaMetadataUpdater.QuoteTableAndColumns(conf); //创建数据库架构 new SchemaExport(conf).Create(false, true); //建立SessionFactory var factory = conf.BuildSessionFactory(); //打开Session做持久化数据 using (var s = factory.OpenSession()) { using (var tx = s.BeginTransaction()) { var domain = new Domain {Name = "我的测试"}; s.Save(domain); tx.Commit(); } } //打开Session做删除数据 using (var s = factory.OpenSession()) { using (var tx = s.BeginTransaction()) { s.CreateQuery("delete from Domain").ExecuteUpdate(); tx.Commit(); } } //删除数据库架构 new SchemaExport(conf).Drop(false, true); } static void Main(string[] args) { ShowXmlMapping(); JustForConfOrm(); //运行后可以打开输出目录MyMapping.hbm.xml文件看看输出xml Console.ReadKey(); } } }
代码是来着园子里
YJingLee's Blog 这位大哥的博客里面。 这里的类Program里面的代码是将Domain这个实体做了自动映射而且在这里直接建立SessionFactory实例并做了一个添加操作。一般情况下SessionFactory都是封装在一个单独的类里面封装好了的。
假如现在我有其他的实体比如Users或者Address等等 很多实体要做这种映射 我应该怎么来写才能实现。难道我需要给每个实体类创建一个对应的Program类来为他做映射吗。