0

私は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());

私が間違っているかもしれないことは何ですか?

4

2 に答える 2

1

潜在的なバグのように聞こえます。問題を再現するために最小限のマッピングでここに報告してください(または、失敗したテストでプル リクエストを作成することをお勧めします)。

于 2015-10-27T10:46:59.400 に答える
0

わかりました、悪いです。最小限の例をまとめるために、ID と文字列プロパティだけを持つ新しいクラスを作成しました。そのクラス用に生成されたスキーマも文字列列の長さが 1 であることが判明しました。つまり、Envers とは何の関係もありませんでしたが、エンティティ マッピングが間違っていました (最初にベース テーブルを投稿した例では、 NH によって生成されたものではない、レガシー データベース内)。属性をいじって、<property>欲しいものを手に入れました。

これを手伝ってくれてありがとう。

于 2015-10-29T08:36:07.413 に答える