我正在试验Envers。我的工作正常,但是当它为我的审计实体生成审计表时,它使所有varchar列的长度为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());
知道我可能做错了吗?
答案 0 :(得分:1)
听起来像是一个潜在的错误。请使用最小映射报告here以重现您的问题(甚至更好 - 使用失败的测试创建拉取请求)。
答案 1 :(得分:0)
好的,我的坏。在尝试将最小的示例放在一起时,我创建了一个只有ID和字符串属性的新类。事实证明,为 类生成的模式对于字符串列的长度为1,这意味着它与Envers无关,而是我的实体映射是错误的(在示例中,我最初发布的基表是遗留数据库,不是由NH生成的。我玩了<property>
属性,得到了我想要的东西。
感谢您帮助我完成此任务。