标签: schemaexport

防止Nhibernate schemaexport生成外键约束有很多关系

我有这样的映射:

HasMany(x => x.Orders).KeyColumn("CustomerID");
Run Code Online (Sandbox Code Playgroud)

这导致schemaexport生成这样的约束:

alter table [CustomerOrder] 
    add constraint FK45B3FB85AF01218D 
    foreign key (CustomerID) 
    references [Customer]
Run Code Online (Sandbox Code Playgroud)

我尝试在References()映射上添加.NotFound.Ignore(),以禁止生成约束,但这不起作用.

是否可以定义一个映射来强制SchemaExport不生成约束?

nhibernate nhibernate-mapping fluent-nhibernate schemaexport

13
推荐指数
1
解决办法
2854
查看次数

将字符串设置为"varchar"的sql类型而不是"nvarchar"

我有以下映射:

public class LogEntryMap
{
    public LogEntryMap()
    {
        Map.Id(x => x.Id).GeneratedBy.Identity();
        Map(x => x.Context).CustomSqlType("varchar").Length(512);
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,使用SchemaExport在SQL Server 2008中生成数据库时,生成的脚本会忽略长度,因此实际上它最终为varchar长度为1:

create table OV_SAC.dbo.[LogEntry] (
    Id BIGINT IDENTITY NOT NULL,
   Context varchar null,
   primary key (Id)
)
Run Code Online (Sandbox Code Playgroud)

.CustomSqlType("varchar 512")抛出一个例外.并且没有定义CustomSqlType,字符串被映射到nvarchar(它确实尊重Length属性).

有什么建议?

fluent-nhibernate schemaexport

12
推荐指数
3
解决办法
8482
查看次数

NHibernate可以检查是否已生成数据库模式?

那么,新手NHibernate用户; 试图将我的大脑包裹起来.

我正在考虑如何处理部署,以及稍后向Web应用程序注入附加组件(可能需要自己的持久性类).

我认为SchemaExport用于部署可以很好地工作,但我想知道是否有一种方法也让NHibernate以一种基于代码的通用方式告诉我模式导出已经完成或不完成.基本上,我想做像这个伪代码中的东西:

  if(!_cfg.HasSchemaForType(typeof(MyType))
       ExportSchema(typeof(MyType));
  else
       UpdateSchema(typeof(MyType));
Run Code Online (Sandbox Code Playgroud)

这两个函数将在内部使用SchemaExportSchemaUpdate分别使用.


编辑:伙计们,我赞赏到目前为止的答案,但他们错过了一点.我正在尝试设置的是一种方法,允许应用程序添加和删除可能需要更改数据库的附加组件.我不是在谈论版本化我自己的代码之类的东西(至少不是它的主要功能).所以问题不在于我何时部署应用程序,而是关于何时添加或删除插件.是否已经部署过theis插件(因此伪代码类型检查)?如果是,请运行更新.如果没有,请运行导出.合理?

asp.net nhibernate schemaexport

9
推荐指数
3
解决办法
4597
查看次数

流畅的NHibernate ExportSchema没有连接字符串

我想生成一个数据库脚本,而没有声明实际的数据库连接字符串.

为了做到这一点,我现在使用NHibernate ExportSchema基于用Fluent NHibernate生成的NHibernate配置(在我的ISessionFactory创建方法期间):

FluentConfiguration configuration = Fluently.Configure();               
//Mapping conf ...
configuration.Database(fluentDatabaseProvider);
this.nhibernateConfiguration = configuration.BuildConfiguration();
returnSF = configuration.BuildSessionFactory();     

//Later
new SchemaExport(this.nhibernateConfiguration)              
                .SetOutputFile(filePath)
                .Execute(false, false, false);      
Run Code Online (Sandbox Code Playgroud)

fluentDatabaseProvider是一个FluentNHibernate IPersistenceConfigurer,需要获取正确的sql方言来创建数据库.

使用现有数据库创建工厂时,一切正常.但我想要做的是在选定的数据库引擎上创建一个NHibernate配置对象,而不需要在场景后面有真正的数据库...而且我无法做到这一点.

如果有人有一些想法.

database nhibernate configuration fluent schemaexport

5
推荐指数
1
解决办法
862
查看次数

使用SQLite在Fluent NHibernate中使用SchemaExport的外键

我正在尝试创建一个简单的数据库应用程序,使用Fluent NHibernate和SQLite跟踪各种类型设备的贷款.但是,当我尝试生成SchemaExport用于单元测试的数据库结构时,不会创建一对多关系的外键.

这是我的Equipment实体:

public virtual int Id { get; set; }

public virtual EquipmentType Type { get; set; }

public virtual int StockId { get; set; }
Run Code Online (Sandbox Code Playgroud)

这是我的映射Equipment:

Id(x => x.Id);
References(x => x.Type);
Map(x => x.StockId);
Run Code Online (Sandbox Code Playgroud)

除了缺少外键之外,SQL是正确生成的:

create table "Equipment" (
       Id integer,
       StockId INTEGER,
       Type_id INTEGER,
       primary key (Id)
    )
Run Code Online (Sandbox Code Playgroud)

SchemaExport使用SQLite数据库时是否可以生成外键?

谢谢.

sqlite nhibernate foreign-keys fluent-nhibernate schemaexport

5
推荐指数
1
解决办法
1033
查看次数

NHibernate SchemaExport:如何生成有意义的唯一键名?

当我将SchemaExport与SQL Server 2005一起使用时,它会生成唯一的密钥名称,如:

UQ__Employees__03317E3D

如何生成如下名称:UQ__Employees__Name?即使在SQL Server中!

nhibernate schemaexport

5
推荐指数
1
解决办法
2202
查看次数

Grails 2.x模式导出或类似命令可以在给定数据源的情况下为模式更新生成DDL吗?

Grails schema-export在生成DDL以创建特定数据库的数据库模式方面做得很好.但是,我想要做的是,grails只输出DDL以更新已经创建的模式,而不是从头开始创建它的DDL.

我认为它应该是可能的,因为如果您dbCreate = "update"在数据源中具体说明,Grails确实能够实际更新模式.

但我只是希望grails吐出它会运行的内容,而不是实际执行它,所以我可以通过SQL工具以受控方式执行它.

ddl grails schemaexport

4
推荐指数
1
解决办法
1104
查看次数

NHibernate SchemaExport和Configure()catch-22

我想在新项目中使用DDD并首先为我的类建模,然后根据类库生成数据库模式.我的计划是使用NHibernate hbm2ddl工具执行此操作SchemaExport.

问题在于我无法使用它SchemaExport,因为它让我遇到了一个奇怪的catch-22问题.SchemaExport需要一个Configuration对象本身需要一个有效的NHibernate配置文件以及一组数据库映射.

这里的catch-22是当我执行Configure()时,它会抱怨"Could not determine the name of the table for entity 'MyEntity'; remove the 'table' attribute or assign a value to it."因此该Configure()方法需要表存在,而SchemaExport应该基于Configuration我无法创建的表来创建它,因为表不是没有'存在.

那么,我究竟应该如何创建一个有效的NHibernate,Configuration其中包含SchemaExport实际做一些有用的事情所需的映射而不Configure()抛出并抱怨它无法找到要创建的表SchemaExport?是否有"模式"我可以设置Configuration对象,因此它不会检查数据库中是否存在给定的表,或者还有其他我需要做的事情?

.net nhibernate schemaexport hbm2ddl

3
推荐指数
1
解决办法
5566
查看次数

流畅的NHibernate AutoMapping SchemaExport - 更改对象模型和保持数据

当数据对象模型发生更改(向类中添加新属性)时,是否有一种方法可以使用流畅的自动化来更改模式,目前它只会删除并重新创建数据库模式,这会丢失数据库中的所有数据.它可以使用Alter表而不是drop/create table,还是我只是在做梦?

可以根据自动化流程更新数据库模式而不会丢失数据吗?

干杯,

nhibernate nhibernate-mapping fluent-nhibernate schemaexport automapping

3
推荐指数
1
解决办法
828
查看次数

使用H2的SQL语句中的语法错误

我在H2数据库中的一些sql语句时出错了.那些sql语句来自Hibernate SchemaExport:这是sql语句:

create table CONTACTS (
    person_id bigint not null,
    contact_id bigint not null,
    primary key (person_id, contact_id)
)

 create table PERSON (
    id bigint generated by default as identity,
    FNAME varchar(55),
    NAME varchar(55),
    primary key (id)
)

alter table CONTACTS 
    add constraint UK_r5plahp7wqcsd47hscckyrxgd unique (contact_id)

alter table CONTACTS 
    add constraint FK_r5plahp7wqcsd47hscckyrxgd 
    foreign key (contact_id) 
    references PERSON

alter table CONTACTS 
    add constraint FK_90n1kse999lanaepr0v6hcgtv 
    foreign key (person_id) 
    references PERSON
Run Code Online (Sandbox Code Playgroud)

例如,该行不会在H2中执行.

错误说: [ERROR] Caused by org.h2.jdbc.JdbcSQLException: Syntax error in SQL statement …

hibernate jdbc h2 schemaexport

2
推荐指数
1
解决办法
1万
查看次数