1

データベース (SQL2012Express) の作成時に、mvc4 アプリケーションで流暢な多対多のマッピングに問題があり、マップする 2 つのテーブルが作成されません。

製品は多くのカテゴリに関連付けることができ、カテゴリは多くの製品にすることができるため、多対多の関係にマッピングしたいと考えています。私のクラスのカテゴリには、次のものがあります。

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);
    }
}

そして製品クラスでは:

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();

何が間違っている可能性がありますか?

4

3 に答える 3

0

私は解決しました、間違った行コードは次のとおりです: Map(x => x.Active).Default("True");

データベースは数値 1 = True を必要とするため

于 2012-11-17T09:37:31.603 に答える
0

CategoriaMapコンストラクターに以下を追加してみてください

Table("Categoria");

ProdottiMapそしてコンストラクターに続く

Table("Prodotti");
于 2012-11-15T19:05:14.590 に答える
0

fuent-nHibernate 構成ファイルに追加するだけです

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

その後

.BuildConfiguration().AddProperties(props);
于 2012-11-17T09:47:17.480 に答える