NHibernate.Mapping.Attributes を使用すると、次のようなエンティティ クラスがあります。
[Class]
public class EntityA
{
...
[Id][Generator(class="guid")]
public Guid Id {...}
[Property]
public string Property1 {...}
...
}
次のようなコードを使用して、一時的なエンティティを永続化コンテキストに追加するとします。
...
Guid id;
using(ISession s = sessionFactory.OpenSession())
using(ITransaction t = s.BeginTransaction())
{
EntityA entity = new EntityA();
entity.Property1 = "Some Value";
id = (Guid) s.Save(entity);
t.Commit();
Assert.IsTrue(s.Contains(entity)); // <-- result: true
}
Assert.AreEquals(id, entity.Id); // <-- Result: false, Expexted: true
...
assert は成功すると思いますが、実際の結果は false です。save メソッドが生成された値でエンティティの Id プロパティを更新するという印象があります。NHibernate 1.2 と 2.0 の両方を使用してこれをテストしましたが、同様の結果が得られました。
質問は次のとおりです。
- この動作 (エンティティの ID を更新しない) は設計によるものですか、それともマシンで NHibernate のコンパイルが間違っていますか?