无法使用Castle ActiveRecord创建架构

时间:2010-09-10 11:05:05

标签: schema castle-activerecord

我正在尝试使用Castle ActiveRecord(在"Getting started with 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 个答案:

答案 0 :(得分:3)

'用户'是SQL服务器中的保留字,正在执行的SQL命令是:

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

在SQL Server中命名表User是违法的,但将其命名为 [User] 是合法的。

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")]这样的任何其他名称都可以使用。