1

我有一个问题,在mvc4应用程序中使用流畅的多对多映射, 当创建数据库(SQL2012Express)时,不会创建映射的两个表。多对多流利的NHibernate问题

我想映射到多对多的关系,因为一个产品可以关联到许多类别和类别可以是许多产品。在我的类Ⅰ类有:

public class Categoria : BaseEntity 
{ 
    public virtual string Name { get; set; } 
    public virtual ICollection<Prodotti> Prodotti { get; set; } 

    public Categoria() 
    { 
     Prodotti = new List<Prodotti>(); 
    } 

    public virtual void AddProdotti(Prodotti pro) 
    { 
     Prodotti.Add(pro); 
    } 
} 

而且在prduct类:

public class Prodotti:BaseEntity 
{ 

    public virtual string Name { get; set; } 
    public virtual ICollection<Categoria> Categoria { get; set; } 

    public virtual void AddCategorie(Categoria cat) 
    { 
     Categoria.Add(cat); 
    } 

    public Prodotti() 
    { 
     Categoria = new List<Categoria>(); 
    } 

} 
分别

类的地图是:

public class CategoriaMap : ClassMap<Categoria> 
{ 

    public CategoriaMap() 
    { 
     Id(x => x.Id).GeneratedBy.HiLo("Id"); 
     Map(x => x.Name); 
     Map(x => x.Description); 
     Map(x => x.Active).Default("True"); 

     HasManyToMany(x => x.Prodotti) 
      .Inverse() 
      .Table("CategoryProductsMap") 
      .ParentKeyColumn("CategoriaId").ChildKeyColumn("ProdottiId") 
      .Cascade.All(); ; 
    } 
} 

public class ProdottiMap :ClassMap<Prodotti> 
{ 
    public ProdottiMap() 
    { 
     Id(x=>x.Id).GeneratedBy.HiLo("Id"); 
     Map(x => x.Name).Not.Nullable(); 
     Map(x => x.Price).Precision(3); 
     Map(x => x.isFeatured).Nullable(); 
     Map(x => x.ShortDescription); 
     Map(x => x.FullDescription); 
     Map(x => x.ShowOnHomePage).Nullable(); 
     Map(x => x.Images); 
     Map(x => x.Published).Default("False"); 
     Map(x => x.MetaDescription); 
     Map(x => x.MetaKeywords); 
     Map(x => x.MetaTitle); 
     Map(x => x.SeName); 
     Map(x => x.Deleted).Default("False"); 
     Map(x => x.MinimumPurchaseCount); 

     Map(x => x.ShippingWeight); 
     Map(x => x.ShippingHeight); 
     Map(x => x.ShippingLength); 
     Map(x => x.ShippingWidth); 

     Map(x => x.CreatedOnUtc); 
     Map(x => x.UpdatedOnUtc); 

     HasManyToMany(x => x.Categoria)     
      .Table("CategoryProductsMap") 
      .ParentKeyColumn("ProdottiId").ChildKeyColumn("CategoriaId"); 
    } 
} 

的配置是:

var configuration =Fluently.Configure() 
       .Database(MsSqlConfiguration.MsSql2008.ShowSql().ConnectionString(c => 
       c.FromConnectionStringWithKey("Connection1"))) 
       .Mappings(m => m.FluentMappings 
       .AddFromAssemblyOf<latticinibufala.Entities.Maps.CustomerMap>()  ) 
       // Set session context class to enable ManagedWebSessionContext usage 
       .ExposeConfiguration(cfg => cfg.SetProperty("current_session_context_class", "managed_web")) 
       .ExposeConfiguration(cfg => cfg.SetProperty("adonet.batch_size", "10")) 
       .ExposeConfiguration(BuildSchema) 
       .BuildConfiguration() 
       ; 

      sessionFactory = configuration.BuildSessionFactory(); 

什么可能是错的?

+0

以何种方式它不工作?你的CategoryMap看起来如何? – strmstn

+0

不起作用,因为在数据库表中只显示“CategoryProductsMap”,但不显示Category和Product。 你能解释一下你的CategoryMap怎么样? 也许你想知道我如何绘制类别,请原谅我,但不明白这个问题! – TheNeXt

+0

你可以检查是否将列设置为“Prodotti_Id”和“Categoria_Id”将解决您的问题? – Mariusz

回答

0

尝试增加以下到您的CategoriaMap构造

Table("Categoria"); 

并按照以ProdottiMap构造

Table("Prodotti"); 
+0

谢谢你的回复,我已经尝试过但仍然没有创建表格 – TheNeXt

0

我已经解决了,入错行代码是: 地图(X => x.Active) .DEFAULT( “真”);

,因为数据库需要一个号码1 =真

0

只需添加到您fuent,NHibernate的配置文件

var props = new Dictionary<string, string>(); 
props.Add("query.substitutions", "true 1, false 0"); 

然后

.BuildConfiguration().AddProperties(props);