Insert example for many-to-many relationship

Discussion of open issues, suggestions and bugs regarding Entity Developer - ORM modeling and code generation tool
Post Reply
sijaffer
Posts: 3
Joined: Thu 21 Feb 2013 17:30

Insert example for many-to-many relationship

Post by sijaffer » Thu 21 Feb 2013 17:49

I have 3 tables that are in a many-to-many relationship.

T_BarChart:

Code: Select all

CREATE TABLE [dbo].[T_BarChart]
(
	[Id] INT NOT NULL PRIMARY KEY IDENTITY, 
    [Name] NVARCHAR(50) NOT NULL, 
    [IntervalTypeId] INT NOT NULL, 
    [ViewId] INT NOT NULL, 
    CONSTRAINT [FK_T_BarChart_To_T_IntervalType] FOREIGN KEY ([IntervalTypeId]) REFERENCES [T_IntervalType]([Id]),
	CONSTRAINT [FK_T_BarChart_To_T_Views] FOREIGN KEY ([ViewId]) REFERENCES [T_Views]([Id]) 
)
T_BarChart_To_T_DataColumns:

Code: Select all

CREATE TABLE [dbo].[T_BarChart_To_T_DataColumns] (
    [BarChartId]    INT NOT NULL,
    [ColumnNameId]	[uniqueidentifier] NOT NULL,
	CONSTRAINT [PK_T_BarChart_To_T_Columns] PRIMARY KEY CLUSTERED ([BarChartId] ASC, [ColumnNameId] ASC),
    CONSTRAINT [FK_T_BarChart_To_T_Columns_T_BarChart] FOREIGN KEY ([BarChartId]) REFERENCES [dbo].[T_BarChart] ([Id]),
    CONSTRAINT [FK_T_BarChart_To_T_Columns_T_DataColumns] FOREIGN KEY ([ColumnNameId]) REFERENCES [dbo].[T_DataColumns] ([ColumnID])
);
T_DataColumns:

Code: Select all

CREATE TABLE [dbo].[T_DataColumns](
	[ColumnID] [uniqueidentifier] NOT NULL,
	[ColumnName] [varchar](100) NOT NULL,
	[XMLTag] [varchar](50) NOT NULL,
	[ColumnDesc] [varchar](250) NULL,
	[FunctionTypeId] [int] NOT NULL,
	[UDFName] [varchar](50) NULL,
	[SortOrder] [int] NOT NULL,
	[IsActive] [bit] NOT NULL,
 CONSTRAINT [PK_T_DataColumns] PRIMARY KEY CLUSTERED 
(
	[ColumnID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) 
with the following mappings

DashboardNHModel.TBarChart.hbm.xml:

Code: Select all

<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping assembly="NHDashRepository" namespace="NHDashRepository" xmlns="urn:nhibernate-mapping-2.2">
  <class name="TBarChart" table="T_BarChart" schema="dbo">
    <id name="Id" type="Int32">
      <column name="Id" not-null="true" precision="10" scale="0" sql-type="int" />
      <generator class="identity" />
    </id>
    <property name="Name" type="String">
      <column name="Name" not-null="true" length="50" sql-type="nvarchar" />
    </property>
    <many-to-one name="TIntervalType" class="TIntervalType">
      <column name="IntervalTypeId" not-null="true" precision="10" scale="0" sql-type="int" />
    </many-to-one>
    <many-to-one name="TView" class="TView">
      <column name="ViewId" not-null="true" precision="10" scale="0" sql-type="int" />
    </many-to-one>
    <set name="TDataColumns" table="T_BarChart_To_T_DataColumns" schema="dbo" inverse="true" generic="false">
      <key>
        <column name="BarChartId" />
      </key>
      <many-to-many class="TDataColumn" fetch="join">
        <column name="ColumnNameId" />
      </many-to-many>
    </set>
  </class>
</hibernate-mapping>
DashboardNHModel.TDataColumn.hbm.xml

Code: Select all

<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping assembly="NHDashRepository" namespace="NHDashRepository" xmlns="urn:nhibernate-mapping-2.2">
  <class name="TDataColumn" table="T_DataColumns" schema="dbo">
    <id name="ColumnID" type="Guid">
      <column name="ColumnID" not-null="true" sql-type="uniqueidentifier" />
      <generator class="assigned" />
    </id>
    <property name="ColumnName" type="String">
      <column name="ColumnName" not-null="true" length="100" sql-type="varchar" />
    </property>
    <property name="XMLTag" type="String">
      <column name="XMLTag" not-null="true" length="50" sql-type="varchar" />
    </property>
    <property name="ColumnDesc" type="String">
      <column name="ColumnDesc" not-null="false" length="250" sql-type="varchar" />
    </property>
    <property name="FunctionTypeId" type="Int32">
      <column name="FunctionTypeId" not-null="true" precision="10" scale="0" sql-type="int" />
    </property>
    <property name="UDFName" type="String">
      <column name="UDFName" not-null="false" length="50" sql-type="varchar" />
    </property>
    <property name="SortOrder" type="Int32">
      <column name="SortOrder" not-null="true" precision="10" scale="0" sql-type="int" />
    </property>
    <property name="IsActive" type="Boolean">
      <column name="IsActive" not-null="true" sql-type="bit" />
    </property>
    <set name="TBarCharts" table="T_BarChart_To_T_DataColumns" schema="dbo" generic="false">
      <key>
        <column name="ColumnNameId" not-null="true" sql-type="uniqueidentifier" />
      </key>
      <many-to-many class="TBarChart" fetch="join">
        <column name="BarChartId" not-null="true" precision="10" scale="0" sql-type="int" />
      </many-to-many>
    </set>
    <set name="THeatmapCharts" table="T_HeatmapChart_To_T_DataColumns" schema="dbo" generic="false">
      <key>
        <column name="ColumnNameId" not-null="true" sql-type="uniqueidentifier" />
      </key>
      <many-to-many class="THeatmapChart" fetch="join">
        <column name="HeatmapChartId" not-null="true" precision="10" scale="0" sql-type="int" />
      </many-to-many>
    </set>
    <set name="TTimeSeriesCharts" table="T_TimeSeriesChart_To_T_DataColumns" schema="dbo" generic="false">
      <key>
        <column name="ColumnNameId" not-null="true" sql-type="uniqueidentifier" />
      </key>
      <many-to-many class="TTimeSeriesChart" fetch="join">
        <column name="TimeSeriesChartId" not-null="true" precision="10" scale="0" sql-type="int" />
      </many-to-many>
    </set>
    <set name="TViews" table="T_View_To_T_DataColumns" schema="dbo" generic="false">
      <key>
        <column name="ColumnId" not-null="true" sql-type="uniqueidentifier" />
      </key>
      <many-to-many class="TView" fetch="join">
        <column name="ViewId" not-null="true" precision="10" scale="0" sql-type="int" />
      </many-to-many>
    </set>
    <set name="TDialCharts" inverse="true" generic="false">
      <key>
        <column name="ColumnNameId" />
      </key>
      <one-to-many class="TDialChart" />
    </set>
  </class>
</hibernate-mapping>
I need some code examplese to insert a new BarChart row with the new columns in the many-to-many table.

Code: Select all

        public void AddChart(int viewId, Chart chart)
        {
            try
            {
                string chartType = chart.Type;
                TView tView = _session.Get<TView>(viewId);


                switch (chartType)
                {
                    case "Bar":
                        {
                            _session.Transaction.Begin();
                         
                            string hql = "SELECT i FROM TIntervalType i " +
                                "WHERE Name = :chartName";

                            IQuery query = _session.CreateQuery(hql).SetParameter("chartName", "Bar");

                            IList<TIntervalType> tIntervalType = query.List<TIntervalType>();
                            
                            BarChart barChart = (BarChart)chart;

                            TBarChart tBarChart = new TBarChart();
                            tBarChart.TIntervalType = tIntervalType.ElementAt(0);
                            tBarChart.Name = chart.Label;
                            tBarChart.TView = tView;
                            
                            //ColumnNames = (from TDataColumn tdc in c.TDataColumns select tdc.ColumnName).ToArray()
                            string[] charColumns = barChart.ColumnNames.ToArray();
                            
                            hql = "SELECT d FROM TDataColumn d " +
                                            "WHERE ColumnName IN (:columns)";
                            query = _session.CreateQuery(hql).SetParameterList("columns", charColumns);
                            IList<TDataColumn> tDataColumns = query.List<TDataColumn>();

                            foreach (TDataColumn tdc in tDataColumns)
                            {
                                tBarChart.TDataColumns.Add(tdc);
                            }
                            //tBarChart.TDataColumns.Add(from TDataColumn tdc in tDataColumns select tdc);



                            _session.Save(tBarChart);
                            _session.Transaction.Commit();
                            
                        }
                        break;
.
.
.

}}
When the insert happens, I only see a row created in the T_BarChart table, but no column assosiation is added to the T_BarChart_To_T_DataColumns table.

what am I doing wrong?

Any help will be appreciated in the right way of inserting the records.

Cheers,

Sameer Jaffer

sijaffer
Posts: 3
Joined: Thu 21 Feb 2013 17:30

Re: Insert example for many-to-many relationship

Post by sijaffer » Fri 22 Feb 2013 06:22

Any help is appreciated.

sijaffer
Posts: 3
Joined: Thu 21 Feb 2013 17:30

Re: Insert example for many-to-many relationship

Post by sijaffer » Fri 22 Feb 2013 07:03

Nevermind, I figured it out..

Post Reply