2010-09-10 38 views
3

我正尝试使用Castle ActiveRecord(继屏幕录像"Getting started with ActiveRecord"之后)。无法使用Castle 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 语法不正确,可能有人请告诉我,我做了什么错?

谢谢!

回答

3

用户”是SQL Server中的保留字,正在执行的SQL命令是:

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

做法是非法的名字在SQL Server中的表的用户,但它是合法的命名[用户]

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")]任何其他名称将工作。

+0

谢谢Elish :)我的想法很多,我把'User'类改名为'XUser',它工作:) – 2010-09-10 22:15:58