2017-03-17 2 views
0

그래서 나는 친구를 돕기 위해 새로운 간단한 프로젝트를 만들었다. 그래서 나는 물건 목록을 가지고있는 클래스 고객을 만들었습니다HasMany와 함께 Hibernate 맵핑이 자식 콜렉션을 반환하지 못한다.

지금까지 맵핑과 관계를 저장하는 데 아주 좋았습니다. 나는 능통 자 NHibernate 클래스 맵에 따라 매핑 가서 다음

public class CustomerMap : ClassMap<Customer> { 
    Id(p => p.Id).GenerateBy.Guid(); 
    HasMany(p => p.Stuff).Access.CamelCaseField().KeyColumn("Id").Inverse().Cascade.AllDeleteOrphan(); 
} 

public class StuffMap : ClassMap<Stuff> { 
    Id(p => p.Id).GeneratedBy.Guid(); 
    Reference(p => p.Customer).Column("CustomerId).Not.Nullable(); 
} 

을 내 클래스와 결국

public class Customer { 
    private ISet<Stuff> stuff = new HashSet<Stuff>() 
    public virtual IEnumerable<Stuff> Stuff => stuff; 
    public void AddStuff(Stuff newstuff) { 
     newstuff.Customer = this; 
     stuff.Add(stuff); 
    } 
} 

public class Stuff { 
    public virtual Customer Customer { get; set; } 
} 

이 모든 좋은 작품과 나는 새로운 고객을 만들고 하나 이상을 추가 할 때 메소드 AddStuff를 사용하여 요소를 콜렉션에 넣고 올바르게 작성된 트랜잭션을 데이터베이스에 커밋합니다. 내가 컬렉션의 카운트가 0이라는 다음

[TestMethod] 
public void TestStuffAndCustomer() { 
    var customer = session.Add(new Customer()); 
    customer.AddStuff(new Stuff()); 
    session.Flush(); 

    var customer = session.Query<Customer>().Single(); 
    customer.Stuff.Should().HaveCount(1); 
} 

를 컬렉션의 주장과 같은 테스트를 이유와 함께 실패 할 때

그러나 지금은 이상한은 시작 그러나 나는 시험 및 검사를 디버깅하는 경우 컬렉션에는 요소가 하나 있습니다. 어설 션은 그러나 관계없이 실패합니다.

그래서이 설정에는 어떤 문제가 있습니까?

답변

0

새로운 고객 및 물건을 세션에 추가했지만 저장하지 않고 세션을 플러시한다고 생각합니다.

+0

나는 세션을 커밋하고 그냥 플러시하는 대신 어설 션을 위해 새로운 것을 열어 보았습니다. Neighter는 작동하는 것처럼 보이거나 두 요소가 저장되면 작동하지만 어설 션의 Stuffs 수를 확인할 수는 없습니다. –

+0

.Inverse()를 변경할 수 있습니다. Cascade.AllDeleteOrphan(); 그런 다음 Cascade.SaveOrUpdate()를 호출하십시오. – eyildiz

+0

전혀 변경하지 않으려 고 시도했습니다. 그 이상한 나는 디버그 모드에서 가져온 고객을 확인하고 물건 목록에 요소가 하나 있지만 어설 션이 실패한 것을 볼 수 있습니다. –

관련 문제