2015-10-26 55 views
0

我正在試用Envers。我的工作沒問題,除了當它爲我的審計實體生成審計表時,它使所有的varchar列長度爲1,而不是基表中相應列的長度。Envers生成所有變量長度爲1的審計表模式1

像這樣:

Object: dbo.COMPANY_ADDRESS_TB 

Column   | Type 
----------------------------- 
ID    | int 
COMPANY_ID  | int 
ADDRESS_SEQ_NUM | int 
TYPE   | varchar(40) 
ATTN   | varchar(40) 
STREET1   | varchar(60) 
STREET2   | varchar(60) 
STREET3   | varchar(60) 
CITY   | varchar(40) 
STATE   | varchar(25) 
ZIP    | varchar(18) 
COUNTRY   | varchar(25) 
TIMESTAMP  | binary(8) 
ACTIVE   | int 

然後

Object: dbo.COMPANY_ADDRESS_TB_AUD 

Column   | Type 
------------------------------ 
ID    | int 
REV    | int 
REVTYPE   | tinyint 
REVEND   | int 
ADDRESS_SEQ_NUM | int 
addressSeqNum_MOD | bit 
TYPE    | varchar(1) 
addressType_MOD | bit 
ATTN    | varchar(1) 
attn_MOD   | bit 
STREET1   | varchar(1) 
street1_MOD  | bit 
STREET2   | varchar(1) 
street2_MOD  | bit 
STREET3   | varchar(1) 
street3_MOD  | bit 
CITY    | varchar(1) 
city_MOD   | bit 
STATE    | varchar(1) 
state_MOD   | bit 
ZIP    | varchar(1) 
zip_MOD   | bit 
COUNTRY   | varchar(1) 
country_MOD  | bit 
ACTIVE   | int 
active_MOD  | bit 

我當然可以手工修改的長度,但如果我開始審計了很多實體,可以同時獲得乏味和無差錯俯臥。下面是設置它的代碼:

var properties = new Dictionary<string, string>(); 
    properties[NHibernate.Cfg.Environment.Dialect] = "NHibernate.Dialect.MsSql2008Dialect"; 
    properties[NHibernate.Cfg.Environment.ConnectionDriver] = "NHibernate.Driver.SqlClientDriver"; 
    properties[NHibernate.Cfg.Environment.Hbm2ddlAuto] = "update"; 
    properties[NHibernate.Cfg.Environment.FormatSql] = "true"; 
    properties[NHibernate.Cfg.Environment.ShowSql] = "true"; 
    properties[NHibernate.Cfg.Environment.ConnectionString] = "Data Source=localhost;Initial Catalog=OU_KASH;Integrated Security=True;Asynchronous Processing=true"; 
    var cfg = new Configuration(); 
    cfg.Configure() 
     .SetProperties(properties) 
     .AddAssembly(typeof(AliasTb).Assembly.FullName) 
     ; 

    cfg.SetEnversProperty(ConfigurationKey.StoreDataAtDelete, true); 
    cfg.SetEnversProperty(ConfigurationKey.AuditStrategy, typeof(NHibernate.Envers.Strategy.ValidityAuditStrategy)); 
    cfg.SetEnversProperty(ConfigurationKey.TrackEntitiesChangedInRevision, true); 
    cfg.SetEnversProperty(ConfigurationKey.GlobalWithModifiedFlag, true); 

    cfg.IntegrateWithEnvers(new AttributeConfiguration()); 

任何想法我可能會做錯什麼?

回答

1

聽起來像是一個潛在的錯誤。請用最小的映射報告here以重現您的問題(或者甚至更好 - 創建具有失敗測試的拉取請求)。

+0

謝謝。我會按照你的建議去做,但我不熟悉你的後續建議:我如何「通過失敗的測試創建請求」? – Michael

0

好吧,我的壞。在試圖把一個最小的例子放在一起時,我創建了一個只有一個ID和一個字符串屬性的新類。事實證明,爲生成的綱要類的字符串列的長度也爲1,這意味着它與Envers無關,而是我的實體映射是錯誤的(在我最初發布基礎的示例中表在舊數據庫中,不是由NH生成的)。我玩弄<property>屬性,並得到我想要的。

感謝您幫助我解決這個問題。