如何从域逻辑生成NHibernate映射文件和数据库结构?

时间:2009-05-01 18:12:06

标签: c# database nhibernate nhibernate-mapping

我想在我的项目中的域对象上实现NHibernate,但我不确定如何生成映射文件和数据库。

我发现了一些与herehere有关的问题,但我从已经定义的类开始,并希望从它们开始并向下工作而不是相反。

有没有办法做到这一点?

我对多阶段流程完全没问题,我只是想知道其他人为他们所取得的成就。

仅供参考,我想在SQL Server 2005上部署数据库。

2 个答案:

答案 0 :(得分:2)

我喜欢Fluent-NHibernate。请参阅下面的示例以映射User类,当然您可以使用XML。

lamda表达式中的x值表示域类。

这非常像我非常喜欢的RoR

public sealed class UserMap : ClassMap<User>, IMapGenerator
    {
        public UserMap()
        { 
            Id(x => x.Id)
                .WithUnsavedValue(0);
            Map(x => x.Username).TheColumnNameIs("UserName");
            Map(x => x.Password).TheColumnNameIs("Password");   
            Map(x => x.Salt).ReadOnly();

            Map(x => x.CreatedOn).ReadOnly();
            Map(x => x.CreatedBy).ReadOnly();
            Map(x => x.CreatedAt).ReadOnly();

            Map(x => x.ApprovalStatus)
                .TheColumnNameIs("ApprovalStatusId")
                .CustomTypeIs(typeof(ApprovalStatus));

            Map(x => x.DeletionStatus)
                .TheColumnNameIs("DeletionStatusId")
                .CustomTypeIs(typeof(DeletionStatus));

            References(x => x.Role).Not.Nullable();
            References(x => x.Contact);

        }

        #region IMapGenerator Members

        public System.Xml.XmlDocument Generate()
        {
            return CreateMapping(new MappingVisitor());
        }

        #endregion
    }

答案 1 :(得分:2)

关于映射: 您可以使用像Gary这样的Fluent Mapping创建映射。 当您拥有一个非常简单的域模型时,您可以使用自动映射,这是FluentNhibernate的基于约定的映射功能:

 var sessionFactory = Fluently.Configure()  
   .Database(MsSqlConfiguration.MsSql2005  
     .ConnectionString(c => c  
       .Is(ApplicationConnectionString)))  
   .Mappings(m =>  
     m.AutoMappings.Add(AutoPersistenceModel.MapEntitiesFromAssemblyOf<Product>())  
   )  
   .BuildSessionFactory();

这就是你所需要的。

您可以使用schemaexport构建数据库:

var schemaExport = new SchemaExport(configuration);
schemaExport.Create(false,true);