2008-11-24 6 views

Répondre

6

La solution suivante utilise la même approche que la solution dans l'exemple, et le XML généré est aussi bon que le même. J'ai omis de spécifier les noms de colonnes et de telles choses par souci de concision.

Domaine:

public class Customer 
{ 
    private ISet<Order> orders = new HashedSet<Order>(); 

    public long Id { get; set; } 
    public string Name { get; set; } 
    public ISet<Order> Orders 
    { 
     get { return orders; } 
     private set { orders = value; } 
    } 
} 

public class Order 
{ 
    public long Id { get; set; } 
    public DateTime Date { get; set; } 
    public Customer Customer { get; set; } 
    public IList<LineItem> LineItems { get; private set; } 
} 

public class LineItem 
{ 
    public int Quantity { get; set; } 
    public Product Product { get; set; } 
} 

public class Product 
{ 
    public long Id { get; set; } 
    public string SerialNumber { get; set; } 
} 

Cartographie:

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

     Map(x => x.Name); 

     HasMany<Order>(x => x.Orders) 
      .IsInverse() 
      .AsSet(); 
    } 
} 

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

     Map(x => x.Date); 

     References<Customer>(x => x.Customer); 
     HasMany<LineItem>(x => x.LineItems) 
      .Component(c => 
       { 
        c.Map(x => x.Quantity); 
        c.References<Product>(x => x.Product); 
       }).AsList(); 
    } 
} 

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

     Map(x => x.SerialNumber); 
    } 
} 

Pour voir le mapping XML généré, vous pouvez utiliser ce code:

 Configuration config = new Configuration().Configure(); 
     PersistenceModel model = new PersistenceModel(); 

     model.addMappingsFromAssembly(typeof(CustomerMap).Assembly); 
     model.Configure(config); 

     model.WriteMappingsTo("your folder name here"); 

J'espère que cela aide .

/Erik

Questions connexes