2011-01-31 9 views
0

유창한 nhibernate Getting started tutorial에 따라 다 대다 관계를 만들었습니다.많은 수의 nhibernate에서 많은 수의 nhibernate로 레코드 되 돌리기?

http://wiki.fluentnhibernate.org/images/2/24/FirstProjectSchema.png

는 지금은 데이터를 검색하는 방법을하지 확신합니다. 예를 들어 상점에서 판매하는 모든 제품을 얻으려면 어떻게 될까요?

그래서 제품 테이블에서 storeId를 사용해야합니다. 그러나 제품 테이블에는 storeId가 없으며 실제로 StoreProduct에 대한 매핑이나 속성을 포함하는 클래스가 없습니다.

그래서 나는 그래서 그들에 쿼리를 수행 한 다음 스토어 및 제품에 가입 할 필요 할

session.Query<StoreProduct>().Where(x => x.StoreId == "1").toList(); 

을 갈 수 없어?

편집 여기

내가 무슨의 약화 버전입니다.

 public class Student 
     { 
      public virtual Guid StudentId { get; private set; } 
      public virtual IList<Course> Courses { get; set; } 
      public virtual IList<Permission> Permissions{get; set;} 


      public Student() 
      { 
       Courses = new List<Course>(); 
       Permissions = new List<Permission>(); 
      } 

    public class StudentMap : ClassMap<Student> 
     { 
      public StudentMap() 
      { 
       Table("Students"); 
       Id(x => x.StudentId).Column("StudentId"); 
       HasManyToMany(x => x.Permissions).Table("PermissionLevel"); 
       HasManyToMany(x => x.Courses).Table("PermissionLevel"); 
      } 
     } 

    public class CourseMap : ClassMap<Course> 
    { 
     public CourseMap() 
     { 
      Table("Courses"); 
      Id(x => x.CourseId).Column("CourseId"); 
      HasManyToMany(x => x.Permissions).Table("PermissionLevel"); 
      HasManyToMany(x => x.Students).Table("PermissionLevel"); 
     } 
    } 

    public class Course 
    { 
     public virtual int CourseId { get; private set; } 
     public virtual IList<Permission> Permissions { get; set; } 
     public virtual IList<Student> Students { get; set; } 


     public Course() 
     { 
      Permissions = new List<Permission>(); 
      Students = new List<Student>(); 
     } 
    } 

    public class PermissionMap : ClassMap<Permission> 
    { 
     public PermissionMap() 
     { 
      Table("Permissions"); 
      Id(x => x.PermissionId).Column("PermissionId"); 
      HasManyToMany(x => x.Students).Table("PermissionLevel"); 
     } 
    } 

public class Permission 
    { 
     public virtual int PermissionId { get; private set; } 
     public virtual IList<Student> Students {get; set;} 

     public Permission() 
     { 
      Students = new List<Student>(); 
     } 
    } 


var a = session.Query<Student>().Where(x => x.Email == email).FirstOrDefault(); 
      var b = session.Get<Student>(a.StudentId).Courses; 

오류를 들여다 보면 오류가납니다.

컬렉션 초기화 할 수 : [Student.Courses # 757f27a2-e997-44f8-b2c2-6c0fd6ee2c2f] [SQL : SELECT courses0_.Student_id Student3_1_, courses0_.Course_id 같은 Course1_1_로서 course1_.CourseId을 CourseId2_0_, course1_.Prefix로 courses0_ 아우터 왼쪽 Prefix2_0_, Backgrou3_2_0_ 같은 course1_.BackgroundColor PermissionLevel FROM 는 courses0_.Course_id = course1_.CourseId WHERE courses0_.Student_id =?] "

,745,151의 과정을 course1_ 참여함에

답변

0

당신은 학생에 대한 잘못된 매핑이

HasManyToMany(x => x.Courses).Table("StudentCourses"); 

을 그리고 학생 클래스는 완전하지 않습니다.

+0

은 어떤 방식으로 불완전합니다. PermissionLevel 테이블을 둘 다 사용할 수 없습니까? – chobo2

+0

@ chobo2 매핑에있는 권한 모음이 없습니다. 이 코드에 따르면,'HasManyToMany (x => x.Permissions) .Table ("PermissionLevel");'을 컴파일하면 안된다 – gor

+0

아 예제를 복사 할 때 실수로 삭제했다. – chobo2

1

아니요, 그렇지 않습니다. StoreProduct는 상점과 상품간에 다 대다 관계를 유지하는 특수 테이블입니다. NHibernate는이 테이블을 자동으로 사용하여 Store의 제품 컬렉션을 채울 수 있습니다. 맵핑에서 설명되어야합니다. 당신은 다음과 같이 질의합니다 :

여기
var storeProducts = session.Get<Store>(1).Products; 

는 스토어에 대한 매핑입니다 :

public class StoreMap : ClassMap<Store> 
{ 
    public StoreMap() 
    { 
    Id(x => x.Id); 
    Map(x => x.Name); 
    HasMany(x => x.Staff) 
     .Inverse() 
     .Cascade.All(); 
    HasManyToMany(x => x.Products) 
    .Cascade.All() 
    .Table("StoreProduct"); 
    } 
} 

공지 사항 라인 HasManyToMany(x => x.Products).Table("StoreProduct") 그들이 소스로 테이블 StoreProduct를 사용하는 NHibernate에 얘기 다 대다 관계를 저장 컬렉션에있는 객체 제품. 그것은 다음과 같은해야

HasManyToMany(x => x.Permissions).Table("PermissionLevel"); 
HasManyToMany(x => x.Courses).Table("PermissionLevel"); 

:

+0

@gor - 그럼 내 파일에 매핑해야합니다. 아마 나는 그것을 놓쳤다.또한 라인 컴파일되지 않습니다. () 개체 ID를 원하는 것 같습니다. – chobo2

+0

예, ID를 잊어 버렸습니다 – gor

+0

@gor - 계속 "컬렉션을 초기화 할 수 없습니다 :" – chobo2

관련 문제