2010-05-03 69 views
0

我有以下情況。我有一個Movie對象,它包含一個字符列表,並且每個字符都有一個人(actor)。另外,我希望演員對象包含一個字符列表。多對多映射問題 - 子集合始終爲空

我已經在fluent-nhibernate中設置了我的映射,除了Person.Characters集合總是空的,一切看起來都很完美。奇怪的是Characters.Person對象填充正確,並且Movie.Characters集合正確填充。這只是Person.Characters始終保持空白。

下面是我使用的映射:

public class MovieMap : ClassMap<Movie> 
{ 
    public MovieMap() 
    { 
     Id(x => x.Id, "movie_id") 
      .GeneratedBy.Assigned(); 

     Map(x => x.Title); 

     HasMany<Character>(x => x.Characters) 
      .KeyColumn("movie_id") 
      .Inverse() 
      .Cascade.All() 
      .Not.LazyLoad(); 
    } 
} 

public class PersonMap : ClassMap<Person> 
{ 
    public PersonMap() 
    { 
     Id(x => x.Id, "person_id") 
      .GeneratedBy.Assigned(); 

     Map(x => x.Name); 

     HasMany<Character>(x => x.Characters) 
      .KeyColumn("person_id") 
      .Inverse() 
      .Cascade.All() 
      .Not.LazyLoad(); 
    } 
} 

public class CharacterMap : ClassMap<Character> 
{ 
    public CharacterMap() 
    { 
     Id(x => x.Id) 
      .GeneratedBy.Native(); 

     Map(x => x.Name); 

     References(x => x.Movie, "movie_id") 
      .ForeignKey("movie_id") 
      .Cascade.All(); 

     References(x => x.Person, "person_id") 
      .ForeignKey("person_id") 
      .Cascade.All(); 
    } 
} 

這裏是我的課:

public class Person 
{ 
    public Person(int id) 
    { 
     Id = id; 
     Characters = new List<Character>(); 
    } 

    public virtual long Id { get; private set; } 
    public virtual string Name { get; set; } 
    public virtual IList<Character> Characters { get; set; } 
} 

public class Movie 
{ 
    public Movie(int Id) 
    { 
     Id = id; 
     Characters = new List<Character>(); 
    } 

    public virtual long Id { get; private set; } 
    public virtual string Title { get; set; } 
    public virtual IList<Character> Characters { get; set; } 
} 

public class Character 
{ 
    public Character() 
    { 
    } 

    public virtual int Id { get; private set; } 
    public virtual Movie Movie { get; set; } 
    public virtual Person Person { get; set; } 
    public virtual string Name { get; set; } 
} 

回答

0

你試過檢索個別演員或角色?使用這些映射的錯誤可能會以默默的方式失敗,看起來像找到0記錄。

+0

檢索單個actor會生成一個已填充的actor對象,但Actor.Characters列表爲空。 檢索單個字符會生成正確填充的字符對象,且Character.Actor已填充,但Character.Actor.Characters列表爲空。 – 2010-05-06 20:07:17