Невозможно создать схему с помощью Castle ActiveRecord - PullRequest
3 голосов
/ 10 сентября 2010

Я пытаюсь начать работу с Castle ActiveRecord (после «Начало работы с ActiveRecord» ).

Я создал два класса ActiveRecord, один из которых назван User. Я добавил соответствующие строки в файл app.config и инициализирую с помощью:

var config = ActiveRecordSectionHandler.Instance;
ActiveRecordStarter.Initialize(typeof(User).Assembly, config);

ActiveRecordStarter.CreateSchema();

К сожалению, когда я запускаю это, я получаю следующее исключение:

Необработанное исключение: Castle.ActiveRecord.Framework.ActiveRecordException: Не удалось создать схему ---> NHibernate.HibernateException: Неверный синтаксис рядом с ключевым словом «Пользователь». ---> System.Data.SqlClient.SqlException: Неверный синтаксис рядом с ключевым словом 'Пользователь'

Я загрузил небольшую репродукцию в http://bitbucket.org/hmemcpy/general, Может кто-нибудь сказать мне, что я сделал не так?

Спасибо!

1 Ответ

3 голосов
/ 10 сентября 2010

' Пользователь ' - зарезервированное слово на сервере SQL, выполняется команда SQL:

create table User (Id INT IDENTITY NOT NULL,
                   UserName NVARCHAR(255) null unique,
                   primary key (Id))

Недопустимо называть таблицу «Пользователь» на сервере SQL, но этоДопустимо назвать его [Пользователь] .

create table [User] (Id INT IDENTITY NOT NULL,
                   UserName NVARCHAR(255) null unique,
                   primary key (Id))

В качестве решения вы можете определить разные имена для таблиц и столбцов, названных зарезервированными словами:

[ActiveRecord("[User]")]
public class User : ActiveRecordLinqBase<User>
{
    [PrimaryKey]
    public int Id { get; set; }

    [Property(Unique = true)]
    public string UserName { get; set; }

    [HasMany]
    public IList<Activity> Activities { get; set; }
}

Когдаиспользуя [ ] вокруг имени таблицы, зарезервированные имена допускаются.То же самое относится и к столбцам отношений:

[ActiveRecord]
public class Activity : ActiveRecordLinqBase<Activity>
{
    [PrimaryKey]
    public int Id { get; set; }

    [BelongsTo("[User]")]
    public User User { get; set; }
}

Конечно, любое другое имя, например [ActiveRecord("SomeUser")], будет работать.

...