2011-02-24 219 views
1

我在這裏遇到問題。參考問題?

如何查看下面的代碼,我有2個對象:「Pedidos」和「Categoria」。一個「Pedido」包含一個「Categorie」。

我做了測試方法,Pedidos和Categoria都存儲在數據庫中。大!

但是...... 「Pedido.Categoria」字段爲空。我哪裏錯了?

實體:

public class Categoria : IKeyed<int>{ 
    public virtual int Id { get; set; } 
    public virtual string Nome { get; set; }}; 

public class Pedido : IKeyed<int>{ 
    public virtual int Id { get; set; } 
    public virtual string Assunto { get; set; } 
    public virtual Categoria Categoria { get; set; } 
    public virtual IList<Interacao> Interacao { get; set; } 

    public virtual void addCategoria(Categoria categoria) 
     {Categoria = categoria;} 
}; 

映射:

public class PedidoMap : ClassMap<Pedido> 
{ 
    PedidoMap() 
    { 
    Table("z1_pedido"); 
    Id(x => x.Id); 
    Map(x => x.Assunto); 
    References(x => x.Categoria).Column("id"); 
    HasMany(x => x.Interacao).LazyLoad().Inverse().Cascade.All(); 
    } 
} 


    public class CategoriaMap : ClassMap<Categoria> 
{ 
    CategoriaMap() 
    { 
     Table("z1_categoria"); 
     Id(x => x.Id); 
     Map(x => x.Nome).Column("nome"); 
    } 
} 

測試方法:

 public void AddTest() 
    { 
     Repository<Pedido> repository = new Repository<Pedido>(unitOfWork.Session); 
     Repository<Categoria> catRepo = new Repository<Categoria>(unitOfWork.Session); 

     Categoria cat = new Categoria 
     { 
      Nome = "2", 
     }; 
     Pedido pedido = CreatePedido(string.Format("Pedido {0}", 1), 2,cat); 

     repository.Add(pedido); 
     catRepo.Add(cat); 
     unitOfWork.Commit(); 
    } 

    private static Pedido CreatePedido(string assunto, int numberofInteractions, Categoria cat) 
    { 
     Pedido pedido = new Pedido 
     { 
      Assunto = assunto, 
      Categoria = cat, 
     }; 
     pedido.addCategoria(cat); 

     return pedido; 
    } 

THKS,夥計們。

回答

3

這是我想到的問題:

References(x => x.Categoria).Column("id"); 

使用默認約定的主鍵列將被命名爲Id但在這種情況下,它也將是外鍵Categoria表(SQL標識符不區分大小寫)這將導致非常奇怪的關係(每個Pedido與具有相同ID的Categoria相關(如果有的話)。)

在引用上指定的列名引用實體自身使用的外鍵列,因爲可以從該實體的映射中推斷出另一個實體中的主鍵列。因此,爲了得到一個正常的許多一對一的關係,你應該爲Categoria參考更改列名(以例如「categoria_id」):

public class PedidoMap : ClassMap<Pedido> 
{ 
    PedidoMap() 
    { 
    Table("z1_pedido"); 
    Id(x => x.Id); 
    Map(x => x.Assunto); 
    References(x => x.Categoria).Column("categoria_id"); 
    HasMany(x => x.Interacao).LazyLoad().Inverse().Cascade.All(); 
    } 
} 
+0

牛逼小時ňķ小號!!!!!!我幾乎禿頂。它真的起作用了! – Thiago 2011-02-24 13:49:05