我正在尝试使用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上传了一个小型复制品,有人可以告诉我,我做错了什么吗?
谢谢!
答案 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")]
这样的任何其他名称都可以使用。