그래서 나는 친구를 돕기 위해 새로운 간단한 프로젝트를 만들었다. 그래서 나는 물건 목록을 가지고있는 클래스 고객을 만들었습니다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);
}
를 컬렉션의 주장과 같은 테스트를 이유와 함께 실패 할 때
그러나 지금은 이상한은 시작 그러나 나는 시험 및 검사를 디버깅하는 경우 컬렉션에는 요소가 하나 있습니다. 어설 션은 그러나 관계없이 실패합니다.
그래서이 설정에는 어떤 문제가 있습니까?
나는 세션을 커밋하고 그냥 플러시하는 대신 어설 션을 위해 새로운 것을 열어 보았습니다. Neighter는 작동하는 것처럼 보이거나 두 요소가 저장되면 작동하지만 어설 션의 Stuffs 수를 확인할 수는 없습니다. –
.Inverse()를 변경할 수 있습니다. Cascade.AllDeleteOrphan(); 그런 다음 Cascade.SaveOrUpdate()를 호출하십시오. – eyildiz
전혀 변경하지 않으려 고 시도했습니다. 그 이상한 나는 디버그 모드에서 가져온 고객을 확인하고 물건 목록에 요소가 하나 있지만 어설 션이 실패한 것을 볼 수 있습니다. –