Fluent nHibernate - How to map a non-key column on

2019-05-29 17:25发布

问题:

Taking an example that is provided on the Fluent nHibernate website, I need to extend it slightly:

alt text http://wiki.fluentnhibernate.org/images/2/24/FirstProjectSchema.png

I need to add a 'Quantity' column to the StoreProduct table. How would I map this using nHibernate?

An example mapping is provided for the given scenario above, but I'm not sure how I would get the Quantity column to map to a property on the Product class:

public class StoreMap : ClassMap<Store>
{
  public StoreMap()
  {
    Id(x => x.Id);
    Map(x => x.Name);
    HasMany(x => x.Employee)
      .Inverse()
      .Cascade.All();
    HasManyToMany(x => x.Products)
     .Cascade.All()
     .Table("StoreProduct");
  }
}

回答1:

One suggestion would be to not use the hasManyToMany mapping and have a separate mapping class for StoreProduct which is a subclass of Product.

New Store Mapping

public class StoreMap : ClassMap<Store>
{
  public StoreMap()
  {
    Id(x => x.Id);
    Map(x => x.Name);
    HasMany(x => x.Employee)
      .Inverse()
      .Cascade.All();
    HasMany(x => x.Products)
     .Cascade.All();
  }
}

NB changed HasManyToMany to HasMany instead.

New sub class mapping for Store Product

public class StoreProductMap : SubclassMap<StoreProduct>
{
   References(x=>x.Store);

   Map(x=>x.Quantity);
}

New StoreProduct entity

public class StoreProduct : Product
{
    public virtual Store Store {get;set;}
    public virtual int Quantity {get;set;}
}

Hope that helps.