nhibernate isession.save (newtransientity)가 생성 된 ID 만 반환하지만 엔티티의 ID 속성을 업데이트하지 않는 것이 사실입니까?
-
03-07-2019 - |
문제
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
...
나는 주장이 성공할 것이라고 생각하지만 실제 결과는 거짓이라고 생각합니다. 저장 메소드가 생성 된 값으로 엔티티의 ID 속성을 업데이트한다는 인상이 있습니다. 비슷한 결과로 nhibernate 1.2와 2.0을 모두 사용하여 이것을 테스트했습니다.
그래서 문제는 다음과 같습니다.
- 이 동작 (엔티티의 ID를 업데이트하지 않음)이 설계별로 또는 내 컴퓨터에서 nhibernate를 잘못 편집 한 것이 있습니까?
해결책
ID의 이름을 지정하지 않았습니다
대신에:
[Id]
이름을 지정해야합니다.
[Id(Name="Id")]
첫 번째 경우 생성 된 매핑이 잘못되었습니다.
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class name="Test.EntityA, test">
<id type="Guid">
<generator class="guid" />
</id>
</class>
</hibernate-mapping>
두 번째 경우에는 올바른 매핑을 얻을 수 있습니다.
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class name="Test.EntityA, test">
<id type="Guid" name="Id">
<generator class="guid" />
</id>
</class>
</hibernate-mapping>
누락 된 이름 = "id"속성에 주목하십시오.
제휴하지 않습니다 StackOverflow