Nhibernate在db create脚本中生成错误 - c#

我正在尝试使用流利的nhibernate,nhibernate 3.0,spring.net 1.3.1和SQLite生成数据库模式。 NHibernate生成的创建/更新脚本是

create table LogEntries (Id UNIQUEIDENTIFIER not null, Hostname TEXT not null, LoggerName TEXT not null, LogLevel INTEGER not null, Message TEXT not null, primary key (Id))
create table Properties (Id INTEGER not null, Key TEXT, Value TEXT, LogEntry_id UNIQUEIDENTIFIER, Index INTEGER, primary key (Id))

但是它失败并显示以下错误

System.Data.SQLite.SQLiteException: SQLite error
near "Index": syntax error

实体:

public class LogEntry
{
    public virtual Guid Id { get; set; }

    public virtual string LoggerName { get; set; }

    public virtual string Message { get; set; }

    public virtual int LogLevel { get; set; }

    public virtual string Hostname { get; set; }

    public virtual IList<Property> Properties { get; set; }
}

public class Property
{
    public virtual int Id { get; set; }

    public virtual string Key { get; set; }

    public virtual string Value { get; set; }
}

和映射类

public class LogEntryMap : ClassMap<LogEntry>
{
    public LogEntryMap()
    {
        Table("LogEntries");
        Id(x => x.Id).GeneratedBy.GuidComb();

        Map(x => x.Hostname).Not.Nullable();
        Map(x => x.LoggerName).Not.Nullable();
        Map(x => x.LogLevel).Not.Nullable();
        Map(x => x.Message).Not.Nullable();

        HasMany(x => x.Properties).Cascade.AllDeleteOrphan().AsList();
    }
}

public class PropertyMap : ClassMap<Property>
{
    public PropertyMap()
    {
        Table("Properties");

        Id(x => x.Id).GeneratedBy.Increment();

        Map(x => x.Key);
        Map(x => x.Value);
    }
}

参考方案

我目前正在自己​​学习NHibernate(正在阅读NHibernate 3.0 Cookbook),所以我绝对不是专家。

我现在有一个同样的问题,在SQLite环境中有一个HasMany-map Parent.Children。这也会因Index语法错误而崩溃。

从我设法得出的结论来看,Index是一个保留关键字(不是几乎每个RDBMS都使用它吗?)。似乎这些关键字默认情况下不会转义,因此,SQL脚本无效。

根据这本书,您可以通过在列名称中添加反引号来转义列名称:

HasMany(x => x.Children).Cascade.AllDeleteOrphan().AsList(p => p.Column("`Index"));

但是,即使这个“有效”,它也会生成以下SQL查询,该查询似乎已删除了x:

create table Child (
    Id INTEGER not null,
   ChildType TEXT not null,
   Version INTEGER not null,
   Content TEXT,
   Title TEXT not null,
   Parent_id INTEGER,
   "Inde" INTEGER,
   primary key (Id)
)

因此,请考虑:

指定不是关键字的自定义索引列名,
依靠反引号自动转义(不知道这里发生了什么,没有时间检查)
如果您实际上不需要有序列表,请使用其他集合类型。见List vs Set vs Bag in NHibernate

与哪些运算符>>兼容 - java

我这里没有什么代码int b=3; b=b >> 1; System.out.println(b); 它可以完美工作,但是当我将变量b更改为byte,short,float,double时,它包含错误,但是对于变量int和long来说,它可以完美工作,为什么它不能与其他变量一起工作? 参考方案 位移位运算符(例如>>)与任何整数类型兼…

>> Python中的运算符 - python

>>运算符做什么?例如,以下操作10 >> 1 = 5有什么作用? 参考方案 它是右移运算符,将所有位“右移”一次。二进制10是1010移到右边变成0101这是5

Python 3运算符>>打印到文件 - python

我有以下Python代码编写项目的依赖文件。它可以在Python 2.x上正常工作,但是在使用Python 3进行测试时会报告错误。depend = None if not nmake: depend = open(".depend", "a") dependmak = open(".depend.mak&#…

剃刀付款集成->如何通过关闭按钮X检测剃刀付款模型是否关闭 - javascript

当用户关闭而无需付款时,我在CI框架中使用Razorpay,请创建razor支付模型,然后取消订单,我希望按状态更改为已取消的状态触发查询。所以我怎么能检测到这一点。我已经通过单击jQuery单击关闭功能但无法使用... javascript大神给出的解决方案 Razorpay提供了JS方法来检测模式关闭。您编写的任何JS代码都不会在结帐页面上运行,因为它是…

使用jquery计算<id>中的总图像 - php

我有一个div,里面有一些图像,例如<img src= etc我想计算该div中的图像总数。我也想使用PHP将这些图像ID保存到mysql中...谢谢 参考方案 要计算它们,您可以执行以下操作:alert($('#myDiv img').length); 要将所有id捕获到数组中,可以执行以下操作:var ids = []; $(&…