2010-09-10 81 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