Nano Hash - криптовалюты, майнинг, программирование

Nhibernate генерирует ошибку в скрипте создания базы данных

Я пытаюсь сгенерировать схему db, используя свободный 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);
    }
}

  • Нашел проблему. В классе сопоставления для logEntry я использую AsList (). Когда я удаляю это, он работает 18.01.2011

Ответы:


1

В настоящее время я сам изучаю NHibernate (читаю NHibernate 3.0 Cookbook), поэтому никоим образом не являюсь экспертом.

У меня такая же проблема в данный момент, имея HasMany-map Parent.Children в среде SQLite. Это также приводит к сбою при синтаксической ошибке индекса.

Из того, что мне удалось сделать вывод, Index - зарезервированное ключевое слово (разве оно не присутствует почти в каждой СУБД?). Кажется, что эти ключевые слова не экранируются по умолчанию, и, следовательно, 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)
)

Итак, подумайте:

  • указание настраиваемого имени столбца индекса, которое не является ключевым словом,
  • полагаться на автоматический выход из обратной кавычки (понятия не имею, что здесь происходит, некогда проверять)
  • используйте другой тип коллекции, если вам действительно не нужен упорядоченный список. См. Список vs Набор vs Сумка в NHibernate
21.01.2011
  • Для меня указание Index сработало - в вашем коде похоже, что вы пропустили вторую обратную галочку. 19.08.2011
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..