2009-08-24 11 views
10

मुझे फ्लुएंट एनएचबेर्नेट उदाहरण में कई समस्याएं का उपयोग करने में कोई समस्या है। मैंने एक समान मामले पर उदाहरण खोजने की कोशिश की, और मुझे टन मिल गया, लेकिन मुझे अभी भी एक ही समस्या है।Fluent NHibernate HasManyToMany() मैपिंग

परीक्षण परियोजना चल रहा है, निम्न अपवाद फेंक दिया जाता है:

NHibernate.PropertyAccessException: अपवाद project.Entities.User.UserName की गेटर हुआ ---> System.Reflection.TargetException: ऑब्जेक्ट से मेल नहीं खाता लक्ष्य प्रकार

यह टेबल की एक छवि है:

Tables

और कोड

public UsersMap() 
    { 

     this.Table("Users"); 
     Id(x => x.UserName).Column("Username").GeneratedBy.Assigned(); 

     Map(x => x.FirstName); 
     Map(x => x.LastName); 
     Map(x => x.Password); 
     Map(x =>x.EMail); 
     Map(x => x.Title); 
     Map(x => x.Division); 


     HasManyToMany<User>(x => x.Roles) 
      .Table("UserInRoles").ParentKeyColumn("Username") 
      .ChildKeyColumn("Usernamepk") 
      .Cascade.SaveUpdate().LazyLoad(); 


    } 

    public RolesMap() 
    { 
     this.Table("Roles"); 
     Id(x => x.ID).GeneratedBy.Assigned().Column("ID"); 
     Map(x => x.RoleName).Length(50); 

     HasManyToMany<User>(x => x.Users) 
      .Table("UserInRoles").ParentKeyColumn("ID") 
      .ChildKeyColumn("RoleIdpk").Cascade.SaveUpdate().LazyLoad(); 

    } 
यहाँ

कोड है, वेब और धाराप्रवाह NHibernate मैपिंग पृष्ठ पर सबसे उदाहरण में लिखे गए हैं वैसे ही, तो कोई विचार?

उत्तर

15

मैं अपने प्रोजेक्ट में उपयोग कर रहा हूँ मैं अपने manyTomany संबंधों इस तरह से परिभाषित करेगा कोड के बारे में:

public UsersMap() 
    { 
... 
      HasManyToMany(x => x.Roles) 
       .WithTableName("UserInRoles") 
       .WithParentKeyColumn("Usernamepk") 
       .WithChildKeyColumn("RoleIdpk"); 
    } 

    public RolesMap() 
    { 
... 
      HasManyToMany(x => x.Users) 
       .WithTableName("UserInRoles") 
       .WithParentKeyColumn("RoleIdpk") 
       .WithChildKeyColumn("Usernamepk"); 

    } 

इस तरह की एक परिभाषा के मेरे लिए काम करता है। पहले इसे जांचें, फिर LazyLoading और कुछ अन्य गुणों के साथ सजाने के लिए।

+4

बीटीडब्ल्यू, फ्लुएंट संस्करण 1.0 का उपयोग कर रहा हूं, इसलिए। विथटेबलनाम() तालिका() है, वैसे भी, मैंने इसे बिना आलसी और अन्य पराजय के उपयोग करने का प्रयास किया, लेकिन फिर भी वही अपवाद: एस – Saeedouv

+1

क्या आपको यकीन है कि इसकी आवश्यकता है दोनों तरफ मैप किया जा सकता है? – UpTheCreek

+0

मेरी स्थिति के लिए मैं दो तरह से बांधना नहीं चाहता। मेरे पास कंपनी, व्यक्ति और पता है और प्रत्येक कंपनी या व्यक्ति के पास 1 से अधिक पता हो सकते हैं। इस स्थिति में मुझे क्या करना चाहिए? – uzay95

संबंधित मुद्दे