2013-05-15 59 views
0

我想實現一個人與汽車之間的一對多關係,並對人員和汽車都進行CRUD操作。簡要CRUD和關係:通過NHibernate的一對多通過代碼或xml進行的Loquacious映射

更新

  • 一個person對通過人對象即人,車很多cars
  • CRUD操作。
  • 刪除一個人將刪除所有他/她的汽車
  • 可以通過人員對象或汽車對象在某人的汽車上執行CRUD操作。

是否有可能通過ORM,特別是NHibernate?

類象下面這樣:

public class PersonSet 
{ 
    public virtual int Id { get; set; } 
    public virtual string Name { get; set; } 
    public virtual ISet<CarSet> Cars { get; set; } 
} 

public class CarSet 
{ 
    public virtual int Id { get; set; } 
    public virtual string Name { get; set; } 
    public virtual PersonSet Person { get; set; } 
} 

映射如下所示:

public class PersonSetMap : ClassMapping<PersonSet> 
    { 
     public PersonSetMap() 
     { 
      Id(x => x.Id, m=>m.Generator(Generators.Identity)); 
      Property(x=>x.Name); 
      Set(x => x.Cars, c => 
       { 
        //c.Key(k => 
        // { 
        //  k.Column("PersonId"); 
        // }); 
        c.Cascade(Cascade.All); 
        c.Lazy(CollectionLazy.NoLazy); 
        // c.Inverse(true); 
       } 
       , r => 
        { 
         r.OneToMany(); 
        } 
       ); 
     } 
    } 

    public class CarSetMap : ClassMapping<CarSet> 
    { 
     public CarSetMap() 
     { 
      Id(x => x.Id, m => m.Generator(Generators.Identity)); 
      Property(x => x.Name); 
      ManyToOne(x => x.Person, m => 
      { 
       m.Column("PersonId"); 
       m.Cascade(Cascade.None); 
       m.NotNullable(true); 
      }); 

     } 
    } 

我的問題是,如果我更新一輛車,並嘗試將其救一個人對象,它不不會改變。

更新

我想找出如果可能的話,並在我上面的映射是錯誤。無論是xml版本還是Loquacious的任何想法也將不勝感激。

Car上應該有PersonId外鍵。

回答

0

我不知道這是否會解決您的問題,但在ManyToOne映射中,Unique和NotNullable方法應應用於列級別。

ManyToOne(x => x.Person, m => 
{ 
    m.Column(c => 
    { 
     c.Name("PersonId"); 
     c.NotNullable(true); 
    }); 
    m.Cascade(Cascade.None); 
}); 
相關問題