nhibernate isession.save (newtransientity)가 생성 된 ID 만 반환하지만 엔티티의 ID 속성을 업데이트하지 않는 것이 사실입니까?

StackOverflow https://stackoverflow.com/questions/411127

문제

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"속성에 주목하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top