首页 新闻 会员 周边 捐助

关于NHibernate ConfORM映射问题。告诉帮忙指点下。

0
悬赏园豆:5 [待解决问题]

之前在使用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类来为他做映射吗。

yzy的主页 yzy | 菜鸟二级 | 园豆:317
提问于:2013-06-06 15:56
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册