使用 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
...
我想断言会成功,但实际结果是错误的。我的印象是 save 方法将使用生成的值更新实体的 Id 属性。我已经通过使用 NHibernate 1.2 和 2.0 进行了测试,结果相似。
所以问题是:
- 这种行为(不更新实体的 ID)是设计使然,还是我的机器中的 NHibernate 编译错误?