2012-03-17 52 views
1

我开始与现有空白 SQL Server 2005数据库,通过FluentNHibernate以下方式配置:功能NHibernate不创建数据库模式

ISessionFactory nhibernateSessionFactory = Fluently 
    .Configure() 
    .Mappings(m => assemblies.ForEach(asm => m.FluentMappings.AddFromAssembly(asm))) 
    .Database(
     MsSqlConfiguration.MsSql2005 
      .ShowSql() 
      .ConnectionString(DatabaseConfig.Instance.ConnectionString)) 
    .ExposeConfiguration(c => new SchemaUpdate(c).Execute(true, true)) 
    .BuildSessionFactory(); 

我有这样的地图:

public abstract class AccountSystemMapBase<T> : ClassMap<T> 
{ 
    protected AccountSystemMapBase() 
    { 
     Schema("`AccountSystem`"); 
    } 
} 

public class UserMap : AccountSystemMapBase<User> 
{ 
    public UserMap() : base() 
    { 
     Table("`User`"); 
     ... 
    } 
} 

我希望User表在数据库模式“AccountSystem”中创建,而不是默认的dbo模式,因此我认为将Schema(...)添加到我的映射中会执行此操作。

实际发生的是当我试图在User表上执行查询时,我收到一个异常,说“对象[AccountSystem].[User]不存在”。实际上,令我惊讶的是,我的数据库中没有任何名为AccountSystem的数据库架构的标志,这意味着模式和表格根本就没有创建。我正在使用NHibernate的verion 3.1,这是目前最新的流利NHibernate支持。任何想法/解决方法,以使模式的创建工作?

回答

3

Nibernate不会创建数据库或用户模式;只有他们内部的表格结构。

您需要先创建数据库(除非你使用的是由驱动程序自动创建嵌入式数据库,但是这不是与SQL Server的情况下)

+0

我创建的数据库(如我已经写在开头我的帖子,我在一个空白数据库执行模式),我需要NHibernate创建它的数据库模式。我也重新考虑清楚。尽管如此,它可能是NHibernate不创建模式 – 2012-03-17 15:13:01

+1

修改我的答案来解决这个问题。它也不会创建用户模式。 – 2012-03-17 16:45:23

+0

谢谢,看来我必须将它们添加到数据库创建脚本中。 – 2012-03-17 17:28:37