using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using Kreta.Framework;
using Kreta.Framework.Collections;
using Kreta.Framework.Collections.Generic;
using Kreta.Framework.Entities;
using Kreta.Framework.Entities.Associations;
using Kreta.Framework.Entities.Generic;

namespace SDA.Kreta.Entities
{
    internal sealed class ENaploTipusDBHelper : EntityDBHelper<ENaploTipus>
    {
        private Dictionary<string, string> dynamicColumns = new Dictionary<string, string>()
        {
            { "Value", "T_DICTIONARYITEMBASE_OSSZES.C_VALUE" },
            { "Name", "T_DICTIONARYITEMBASE_OSSZES.C_NAME" },
            { "Name_1", "T_DICTIONARYITEMBASE_OSSZES.C_NAME_1" },
            { "Name_2", "T_DICTIONARYITEMBASE_OSSZES.C_NAME_2" },
            { "Name_3", "T_DICTIONARYITEMBASE_OSSZES.C_NAME_3" },
            { "Name_4", "T_DICTIONARYITEMBASE_OSSZES.C_NAME_4" },
            { "Visible", "T_DICTIONARYITEMBASE_OSSZES.C_VISIBLE" },
            { "Code", "T_DICTIONARYITEMBASE_OSSZES.C_CODE" },
            { "Type", "T_DICTIONARYITEMBASE_OSSZES.C_TYPE" },
            { "Protected", "T_DICTIONARYITEMBASE_OSSZES.C_PROTECTED" },
            { "Color", "T_DICTIONARYITEMBASE_OSSZES.C_COLOR" },
            { "Order", "T_DICTIONARYITEMBASE_OSSZES.C_ORDER" },
            { "BgColor", "T_DICTIONARYITEMBASE_OSSZES.C_BGCOLOR" },
            { "Description", "T_DICTIONARYITEMBASE_OSSZES.C_DESCRIPTION" },
            { "IsActive", "T_DICTIONARYITEMBASE_OSSZES.C_ISACTIVE" },
            { "ShortName", "T_DICTIONARYITEMBASE_OSSZES.C_SHORTNAME" },
        };

        private const string dynamicQueryCommandText =
            "select " +
                "T_ENAPLOTIPUS_OSSZES.ID, " +
                "{COLUMNS}" +
                // ENaploTipus betöltése
                // ENaploTipus kapcsoló mezői
                "T_ENAPLOTIPUS_OSSZES.C_ALINTEZMENYID, " + /* Kötelező asszociációs kapcsolómező */
                "T_ENAPLOTIPUS_OSSZES.C_ALTANEVID, " + /* Kötelező asszociációs kapcsolómező */
                // DictionaryItemBase kapcsoló mezői
                "T_DICTIONARYITEMBASE_OSSZES.C_DICTIONARYTYPEID, " + /* Kötelező asszociációs kapcsolómező */
                "T_DICTIONARYITEMBASE_OSSZES.C_INTEZMENYID, " + /* Kötelező asszociációs kapcsolómező */
                "T_DICTIONARYITEMBASE_OSSZES.C_TANEVID, " + /* Kötelező asszociációs kapcsolómező */
                "T_DICTIONARYITEMBASE_OSSZES.TOROLT, " +
                "T_DICTIONARYITEMBASE_OSSZES.SERIAL, " +
                "T_DICTIONARYITEMBASE_OSSZES.CREATED, " +
                "T_DICTIONARYITEMBASE_OSSZES.CREATOR, " +
                "T_DICTIONARYITEMBASE_OSSZES.LASTCHANGED, " +
                "T_DICTIONARYITEMBASE_OSSZES.MODIFIER " +
            "from " +
                "T_ENAPLOTIPUS_OSSZES " +
                "inner join T_DICTIONARYITEMBASE_OSSZES on (T_ENAPLOTIPUS_OSSZES.ID = T_DICTIONARYITEMBASE_OSSZES.ID)  " +
            "where " +
                "(1 = 1) ";

        private const string emptyQueryCommandText =
            "select " +
                "T_ENAPLOTIPUS_OSSZES.ID, " +
                // ENaploTipus betöltése
                // ENaploTipus mezői
                // DictionaryItemBase mezői
                "T_DICTIONARYITEMBASE_OSSZES.C_VALUE, " +
                "T_DICTIONARYITEMBASE_OSSZES.C_NAME, " +
                "T_DICTIONARYITEMBASE_OSSZES.C_NAME_1, " +
                "T_DICTIONARYITEMBASE_OSSZES.C_NAME_2, " +
                "T_DICTIONARYITEMBASE_OSSZES.C_NAME_3, " +
                "T_DICTIONARYITEMBASE_OSSZES.C_NAME_4, " +
                "T_DICTIONARYITEMBASE_OSSZES.C_VISIBLE, " +
                "T_DICTIONARYITEMBASE_OSSZES.C_CODE, " +
                "T_DICTIONARYITEMBASE_OSSZES.C_TYPE, " +
                "T_DICTIONARYITEMBASE_OSSZES.C_PROTECTED, " +
                "T_DICTIONARYITEMBASE_OSSZES.C_COLOR, " +
                "T_DICTIONARYITEMBASE_OSSZES.C_ORDER, " +
                "T_DICTIONARYITEMBASE_OSSZES.C_BGCOLOR, " +
                "T_DICTIONARYITEMBASE_OSSZES.C_DESCRIPTION, " +
                "T_DICTIONARYITEMBASE_OSSZES.C_ISACTIVE, " +
                "T_DICTIONARYITEMBASE_OSSZES.C_SHORTNAME, " +
                // ENaploTipus kapcsoló mezői
                "T_ENAPLOTIPUS_OSSZES.C_ALINTEZMENYID, " + /* Kötelező asszociációs kapcsolómező */
                "T_ENAPLOTIPUS_OSSZES.C_ALTANEVID, " + /* Kötelező asszociációs kapcsolómező */
                // DictionaryItemBase kapcsoló mezői
                "T_DICTIONARYITEMBASE_OSSZES.C_DICTIONARYTYPEID, " + /* Kötelező asszociációs kapcsolómező */
                "T_DICTIONARYITEMBASE_OSSZES.C_INTEZMENYID, " + /* Kötelező asszociációs kapcsolómező */
                "T_DICTIONARYITEMBASE_OSSZES.C_TANEVID, " + /* Kötelező asszociációs kapcsolómező */
                "T_DICTIONARYITEMBASE_OSSZES.TOROLT, " +
                "T_DICTIONARYITEMBASE_OSSZES.SERIAL, " +
                "T_DICTIONARYITEMBASE_OSSZES.CREATED, " +
                "T_DICTIONARYITEMBASE_OSSZES.CREATOR, " +
                "T_DICTIONARYITEMBASE_OSSZES.LASTCHANGED, " +
                "T_DICTIONARYITEMBASE_OSSZES.MODIFIER " +
            "from " +
                "T_ENAPLOTIPUS_OSSZES " +
                "inner join T_DICTIONARYITEMBASE_OSSZES on (T_ENAPLOTIPUS_OSSZES.ID = T_DICTIONARYITEMBASE_OSSZES.ID)  " +
            "where " +
                "(1 = 1) ";

        public override string EmptyQueryCommandText
        {
            get
            {
                return emptyQueryCommandText;
            }
        }

        public override string DynamicQueryCommandText
        {
            get
            {
                return dynamicQueryCommandText;
            }
        }

        public override IDictionary<string, string> DynamicColumns
        {
            get
            {
                return dynamicColumns;
            }
        }

        protected override ENaploTipus CreateEntityInstance()
        {
            return ENaploTipus.GiveAnInstance();
        }

        #region Lekérdezés

        public override void LoadEntityFields(ENaploTipus entity, SDA.DataProvider.SDADataReader reader)
        {
            // ENaploTipus betöltése
            // ENaploTipus mezői
            // DictionaryItemBase mezői

            entity.m_Value = DAUtil.ReadIntegerAttribute(reader, 1);


            entity.m_Name = DAUtil.ReadStringAttribute(reader, 2, "");


            entity.m_Name_1 = DAUtil.ReadStringAttribute(reader, 3);


            entity.m_Name_2 = DAUtil.ReadStringAttribute(reader, 4);


            entity.m_Name_3 = DAUtil.ReadStringAttribute(reader, 5);


            entity.m_Name_4 = DAUtil.ReadStringAttribute(reader, 6);


            entity.m_Visible = DAUtil.ReadBooleanAttribute(reader, 7, true);


            entity.m_Code = DAUtil.ReadStringAttribute(reader, 8);


            entity.m_Type = DAUtil.ReadStringAttribute(reader, 9, "");


            entity.m_Protected = DAUtil.ReadBooleanAttribute(reader, 10, true);


            entity.m_Color = DAUtil.ReadStringAttribute(reader, 11);


            entity.m_Order = DAUtil.ReadIntegerAttribute(reader, 12);


            entity.m_BgColor = DAUtil.ReadStringAttribute(reader, 13);


            entity.m_Description = DAUtil.ReadStringAttribute(reader, 14);


            entity.m_IsActive = DAUtil.ReadBooleanAttribute(reader, 15, true);


            entity.m_ShortName = DAUtil.ReadStringAttribute(reader, 16);
            // ENaploTipus kapcsoló mezői
            DAUtil.ReadIDAttribute(reader, 17, ref entity.m_AlIntezmenyId, 0);
            DAUtil.ReadIDAttribute(reader, 18, ref entity.m_AlTanevId, 0);
            // DictionaryItemBase kapcsoló mezői
            DAUtil.ReadIDAttribute(reader, 19, ref entity.m_DictionaryTypeId, 0);
            DAUtil.ReadIDAttribute(reader, 20, ref entity.m_IntezmenyId, 0);
            DAUtil.ReadIDAttribute(reader, 21, ref entity.m_TanevId, 0);
        }

        public override void LoadEntityFields(ENaploTipus entity, SDA.DataProvider.SDADataReader reader, ColumnFilterMode columnFilterMode, IEnumerable<string> columns)
        {
            int index = 1;
            if (columns == null)
            {
                columns = new List<string>(index);
            }
            // ENaploTipus betöltése
            // ENaploTipus mezői
            // DictionaryItemBase mezői
            if (((columnFilterMode == ColumnFilterMode.DEFAULT_ALLOWED) ^ (columns.Contains("Value"))))
            {
                entity.m_Value = DAUtil.ReadIntegerAttribute(reader, index++);
            }
            if (((columnFilterMode == ColumnFilterMode.DEFAULT_ALLOWED) ^ (columns.Contains("Name"))))
            {
                entity.m_Name = DAUtil.ReadStringAttribute(reader, index++, "");
            }
            if (((columnFilterMode == ColumnFilterMode.DEFAULT_ALLOWED) ^ (columns.Contains("Name_1"))))
            {
                entity.m_Name_1 = DAUtil.ReadStringAttribute(reader, index++);
            }
            if (((columnFilterMode == ColumnFilterMode.DEFAULT_ALLOWED) ^ (columns.Contains("Name_2"))))
            {
                entity.m_Name_2 = DAUtil.ReadStringAttribute(reader, index++);
            }
            if (((columnFilterMode == ColumnFilterMode.DEFAULT_ALLOWED) ^ (columns.Contains("Name_3"))))
            {
                entity.m_Name_3 = DAUtil.ReadStringAttribute(reader, index++);
            }
            if (((columnFilterMode == ColumnFilterMode.DEFAULT_ALLOWED) ^ (columns.Contains("Name_4"))))
            {
                entity.m_Name_4 = DAUtil.ReadStringAttribute(reader, index++);
            }
            if (((columnFilterMode == ColumnFilterMode.DEFAULT_ALLOWED) ^ (columns.Contains("Visible"))))
            {
                entity.m_Visible = DAUtil.ReadBooleanAttribute(reader, index++, true);
            }
            if (((columnFilterMode == ColumnFilterMode.DEFAULT_ALLOWED) ^ (columns.Contains("Code"))))
            {
                entity.m_Code = DAUtil.ReadStringAttribute(reader, index++);
            }
            if (((columnFilterMode == ColumnFilterMode.DEFAULT_ALLOWED) ^ (columns.Contains("Type"))))
            {
                entity.m_Type = DAUtil.ReadStringAttribute(reader, index++, "");
            }
            if (((columnFilterMode == ColumnFilterMode.DEFAULT_ALLOWED) ^ (columns.Contains("Protected"))))
            {
                entity.m_Protected = DAUtil.ReadBooleanAttribute(reader, index++, true);
            }
            if (((columnFilterMode == ColumnFilterMode.DEFAULT_ALLOWED) ^ (columns.Contains("Color"))))
            {
                entity.m_Color = DAUtil.ReadStringAttribute(reader, index++);
            }
            if (((columnFilterMode == ColumnFilterMode.DEFAULT_ALLOWED) ^ (columns.Contains("Order"))))
            {
                entity.m_Order = DAUtil.ReadIntegerAttribute(reader, index++);
            }
            if (((columnFilterMode == ColumnFilterMode.DEFAULT_ALLOWED) ^ (columns.Contains("BgColor"))))
            {
                entity.m_BgColor = DAUtil.ReadStringAttribute(reader, index++);
            }
            if (((columnFilterMode == ColumnFilterMode.DEFAULT_ALLOWED) ^ (columns.Contains("Description"))))
            {
                entity.m_Description = DAUtil.ReadStringAttribute(reader, index++);
            }
            if (((columnFilterMode == ColumnFilterMode.DEFAULT_ALLOWED) ^ (columns.Contains("IsActive"))))
            {
                entity.m_IsActive = DAUtil.ReadBooleanAttribute(reader, index++, true);
            }
            if (((columnFilterMode == ColumnFilterMode.DEFAULT_ALLOWED) ^ (columns.Contains("ShortName"))))
            {
                entity.m_ShortName = DAUtil.ReadStringAttribute(reader, index++);
            }
            // ENaploTipus kapcsoló mezői
            DAUtil.ReadIDAttribute(reader, index++, ref entity.m_AlIntezmenyId, 0);
            DAUtil.ReadIDAttribute(reader, index++, ref entity.m_AlTanevId, 0);
            // DictionaryItemBase kapcsoló mezői
            DAUtil.ReadIDAttribute(reader, index++, ref entity.m_DictionaryTypeId, 0);
            DAUtil.ReadIDAttribute(reader, index++, ref entity.m_IntezmenyId, 0);
            DAUtil.ReadIDAttribute(reader, index++, ref entity.m_TanevId, 0);
        }

        #endregion

        #region Paraméter kötés

        public override void BindAttributes(ENaploTipus entity, SDA.DataProvider.SDACommand command)
        {
        }

        public override void DynamicBindAttributes(ENaploTipus entity, SDA.DataProvider.SDACommand command)
        {
            System.Text.StringBuilder sb = new System.Text.StringBuilder();
            command.CommandText = command.CommandText.Replace("{COLUMNS}", sb.ToString());
        }

        public override void BindAssociations(ENaploTipus entity, SDA.DataProvider.SDACommand command)
        {
            DAUtil.BindIdParameter(command, "pALINTEZMENYID", entity.InternalAlIntezmenyId);
            DAUtil.BindIdParameter(command, "pALTANEVID", entity.InternalAlTanevId);
        }

        #endregion
    }

    internal class ENaploTipusDA : EntityDataAccessor<ENaploTipus>
    {
        private static ENaploTipusDBHelper m_dbhelper = new ENaploTipusDBHelper();

        protected override IEntityDBHelper<ENaploTipus> dbhelper
        {
            get { return m_dbhelper; }
        }

        #region Load

        public override bool LoadEntity(ENaploTipus entity, int entityId)
        {
            return LoadById(entity, entityId);
        }

        public override bool FilteredLoadEntity(ENaploTipus entity, int entityId, ColumnFilterMode columnFilterMode, IEnumerable<string> columns)
        {
            return LoadById(entity, entityId, columnFilterMode, columns);
        }

        public bool LoadById(ENaploTipus entity, int entityId)
        {
            using (SDA.DataProvider.SDACommand command = dbhelper.CreateEmptyQueryCommand())
            {
                command.CommandText += " and (T_ENAPLOTIPUS_OSSZES.ID = :pID) ";
                command.Parameters.Add("pID", SDA.DataProvider.SDADBType.Int).Value = entityId;
                return dbhelper.LoadSingleEntity(entity, command);
            }
        }

        public bool LoadById(ENaploTipus entity, int entityId, ColumnFilterMode columnFilterMode, IEnumerable<string> columns)
        {
            using (SDA.DataProvider.SDACommand command = dbhelper.CreateDynamicQueryCommand(columnFilterMode, columns))
            {
                command.CommandText += " and (T_ENAPLOTIPUS_OSSZES.ID = :pID) ";
                command.Parameters.Add("pID", SDA.DataProvider.SDADBType.Int).Value = entityId;
                return dbhelper.LoadSingleEntity(entity, command, columnFilterMode, columns);
            }
        }

        [Obsolete("Ezt ne használjátok, mert mindenhova bele kellene fogalmazni a tanév szűrést is! Meg fog majd szűnni!")]
        public override void LoadWithFilter(IEntityCollection<ENaploTipus> collection, string filter, Dictionary<string, object> commandParameters = null)
        {
            using (SDA.DataProvider.SDACommand command = dbhelper.CreateEmptyQueryCommand())
            {
                command.CommandText += filter;
                dbhelper.CreateParameterBinding(command, commandParameters);
                dbhelper.LoadEntityCollection(collection, command);
            }
        }

        [Obsolete("Ezt ne használjátok, mert mindenhova bele kellene fogalmazni a tanév szűrést is! Meg fog majd szűnni!")]
        public override void LoadWithFilter(IEntityCollection<ENaploTipus> collection, string filter, ColumnFilterMode columnFilterMode, IEnumerable<string> columns, Dictionary<string, object> commandParameters = null)
        {
            using (SDA.DataProvider.SDACommand command = dbhelper.CreateDynamicQueryCommand(columnFilterMode, columns))
            {
                command.CommandText += filter;
                dbhelper.CreateParameterBinding(command, commandParameters);
                dbhelper.LoadEntityCollection(collection, command, columnFilterMode, columns);
            }
        }

        #endregion

        #region InsertEntity

        private const string m_InsertCommandText = @"
        insert into T_ENAPLOTIPUS_OSSZES (
            C_ALINTEZMENYID,
            C_ALTANEVID,
            TOROLT,
            SERIAL,
            CREATED,
            CREATOR,
            ID)
        values (
            :pALINTEZMENYID,
            :pALTANEVID,
            :pTOROLT,
            :pSERIAL,
            :pCREATED,
            :pCREATOR,
            :pID )    -- Leszármaztatott entitás ID-ja

        ";

        public override void InsertEntity(ENaploTipus entity)
        {
            entity.InheritedDA.InsertEntity(entity);

            using (SDA.DataProvider.SDACommand command = DAUtil.CreateCommand(m_InsertCommandText))
            {
                dbhelper.BindAttributes(entity, command);
                dbhelper.BindAssociations(entity, command);
                command.Parameters.Add("pTOROLT", SDA.DataProvider.SDADBType.Boolean /* Boolean */).Value = false;
                command.Parameters.Add("pSERIAL", SDA.DataProvider.SDADBType.Int).Value = 0;
                command.Parameters.Add("pCREATED", SDA.DataProvider.SDADBType.DateTime).Value = entity.EntityCreated;
                command.Parameters.Add("pCREATOR", SDA.DataProvider.SDADBType.Int).Value = entity.EntityCreator;
                command.Parameters.Add("pID", SDA.DataProvider.SDADBType.Int).Value = entity.ID;    // leszármaztatott entitás ID-ja

                command.ExecuteNonQuery();

            }
        }

        #endregion

        #region UpdateEntity

        private const string m_UpdateAttributesCommandText = @"
        update T_ENAPLOTIPUS_OSSZES
        set
          {COLUMNS}
          SERIAL = ISNULL(SERIAL,0) + 1,
          LASTCHANGED = :pLASTCHANGED,
          MODIFIER = :pMODIFIER,
          TOROLT = :pTOROLT
        where
          (ID = :pID) 
        ";

        public override bool UpdateEntity(ENaploTipus entity)
        {
            if (entity.InheritedDA.UpdateEntity(entity) == false)
            {
                return false;
            }

            using (SDA.DataProvider.SDACommand command = DAUtil.CreateCommand(m_UpdateAttributesCommandText))
            {
                bool result = true;
                dbhelper.DynamicBindAttributes(entity, command);

                command.Parameters.Add("pID", SDA.DataProvider.SDADBType.Int).Value = entity.ID;
                command.Parameters.Add("pLASTCHANGED", SDA.DataProvider.SDADBType.DateTime).Value = entity.EntityLastChanged;
                command.Parameters.Add("pMODIFIER", SDA.DataProvider.SDADBType.Int).Value = entity.EntityModifier;
                command.Parameters.Add("pTOROLT", SDA.DataProvider.SDADBType.Boolean /* Boolean */).Value = entity.Torolt;

                result = (command.ExecuteNonQuery() == 1);
                return result;
            }
        }

        #endregion

        #region DeleteEntity

        private const string m_FizikaiDeleteCommandText = @"DELETE FROM T_ENAPLOTIPUS_OSSZES WHERE (ID = :pID) ";
        private const string m_LogikaiDeleteCommandText = @"
        UPDATE T_ENAPLOTIPUS_OSSZES 
        SET TOROLT = 'T' ,
          SERIAL = SERIAL + 1,
          LASTCHANGED = :pLASTCHANGED,
          MODIFIER = :pMODIFIER
        WHERE (ID = :pID) ";

        public override void DeleteEntity(ENaploTipus entity, bool logikai = true)
        {
            var _deleteCommandText = logikai ? m_LogikaiDeleteCommandText : m_FizikaiDeleteCommandText;
            using (SDA.DataProvider.SDACommand command = DAUtil.CreateCommand(_deleteCommandText))
            {
                command.Parameters.Add("pID", SDA.DataProvider.SDADBType.Int).Value = entity.ID;

                if (logikai)
                {
                    DateTime lastchanged = DateTime.Now;
                    var modifier = UserContext.Instance.UniqueIdentifier;

                    command.Parameters.Add("pLASTCHANGED", SDA.DataProvider.SDADBType.DateTime).Value = lastchanged;
                    command.Parameters.Add("pMODIFIER", SDA.DataProvider.SDADBType.Int).Value = modifier;
                }

                if (command.ExecuteNonQuery() != 1)
                {
                    throw new EntityNotFoundException("ENaploTipus", entity.ID);
                }
            }

            entity.InheritedDA.DeleteEntity(entity, logikai);
        }

        #endregion

        #region UpdateAssociations

        private const string m_UpdateAssociationCommandText = @"
        update T_ENAPLOTIPUS_OSSZES
        set
            C_ALINTEZMENYID = :pALINTEZMENYID,
            C_ALTANEVID = :pALTANEVID,
            SERIAL = ISNULL(SERIAL,0) + 1,
            LASTCHANGED = :pLASTCHANGED,
            MODIFIER = :pMODIFIER
        where
          (ID = :pID) 
        ";

        public override bool UpdateAssociations(ENaploTipus entity)
        {
            if (entity.InheritedDA.UpdateAssociations(entity) == false)
            {
                return false;
            }

            using (SDA.DataProvider.SDACommand command = DAUtil.CreateCommand(m_UpdateAssociationCommandText))
            {
                dbhelper.BindAssociations(entity, command);

                DateTime lastchanged = DateTime.Now;
                var modifier = UserContext.Instance.UniqueIdentifier;

                command.Parameters.Add("pID", SDA.DataProvider.SDADBType.Int).Value = entity.ID;
                command.Parameters.Add("pLASTCHANGED", SDA.DataProvider.SDADBType.DateTime).Value = lastchanged;
                command.Parameters.Add("pMODIFIER", SDA.DataProvider.SDADBType.Int).Value = modifier;

                bool result = (command.ExecuteNonQuery() == 1);
                return result;
            }
        }

        #endregion

        #region Asszociációkkal kapcsolatos adatbázisműveletek (entitásspecifikus)

        #region Mint asszociációs osztály
        #endregion


        #endregion
    }


    /// <summary>
    /// Az osztály elvégzi az UML modell 'Intezmeny -> ENaploTipus (ENaploTipus)'
    /// asszociációjának teljes kezelését.
    /// </summary>
    internal class Intezmeny_ENaploTipus_DA : EntityCollectionDA<Intezmeny, ENaploTipus>
    {
        internal protected Intezmeny_ENaploTipus_DA(Intezmeny owner)
            : base(owner)
        {
        }

        // Nincs kapcsolótábla
        private const string m_Filter = @" and (T_ENAPLOTIPUS_OSSZES.C_ALINTEZMENYID = :pID) ";

        public override void LoadCollection(IAssociatedEntityCollection<ENaploTipus> collection)
        {
            new ENaploTipusDBHelper().LoadByPartnerId(collection, m_Filter, Owner.ID);
        }

        private static SDA.DataProvider.SDACommand CreateInsertENaploTipusCommand()
        {
            SDA.DataProvider.SDACommand result = new SDA.DataProvider.SDACommand();
            // nincs kapcsolótábla...
            result.CommandText = @"update T_ENAPLOTIPUS_OSSZES set C_ALINTEZMENYID = :pALINTEZMENYID where (ID = :pENAPLOTIPUSID)";
            result.Parameters.Add("pALINTEZMENYID", SDA.DataProvider.SDADBType.Int);
            result.Parameters.Add("pENAPLOTIPUSID", SDA.DataProvider.SDADBType.Int);
            return result;
        }

        private void DoAdd(Intezmeny owner, ENaploTipus partner)
        {
            using (SDA.DataProvider.SDACommand command = CreateInsertENaploTipusCommand())
            {
                command.Connection = UserContext.Instance.SDAConnection;
                command.Transaction = UserContext.Instance.SDATransaction;
                command.Parameters["pALINTEZMENYID"].Value = owner.ID;
                command.Parameters["pENAPLOTIPUSID"].Value = partner.ID;
                command.ExecuteNonQuery();
            }
        }

        public override void AddItem(ENaploTipus entity)
        {
            var assochandler = AssociationHandlerManager.Create<ENaploTipus, Intezmeny>("ENaploTipus_AlIntezmeny");
            assochandler.BeforeInsert(entity, this.Owner);
            entity.ModifyAlIntezmeny(this.Owner);
            if (entity.State == EntityState.Modified)
            {
                entity.UpdateAssociations(true);
            }
            else
            {
                entity.Insert(true);
            }
            assochandler.AfterInsert(entity, this.Owner);
        }

        private static SDA.DataProvider.SDACommand CreateDeleteENaploTipusCommand()
        {
            SDA.DataProvider.SDACommand result = new SDA.DataProvider.SDACommand();
            // nincs kapcsolótábla...
            result.CommandText = @"update T_ENAPLOTIPUS_OSSZES set C_ALINTEZMENYID = null where (C_ALINTEZMENYID = :pALINTEZMENYID and ID = :pENAPLOTIPUSID)";
            result.Parameters.Add("pALINTEZMENYID", SDA.DataProvider.SDADBType.Int);
            result.Parameters.Add("pENAPLOTIPUSID", SDA.DataProvider.SDADBType.Int);
            return result;
        }

        private void DoRemove(Intezmeny owner, ENaploTipus partner)
        {
            using (SDA.DataProvider.SDACommand command = CreateDeleteENaploTipusCommand())
            {
                command.Connection = UserContext.Instance.SDAConnection;
                command.Transaction = UserContext.Instance.SDATransaction;
                command.Parameters["pALINTEZMENYID"].Value = owner.ID;
                command.Parameters["pENAPLOTIPUSID"].Value = partner.ID;
                command.ExecuteNonQuery();
            }
        }

        public override void DeleteItem(ENaploTipus entity)
        {
            var assochandler = AssociationHandlerManager.Create<ENaploTipus, Intezmeny>("ENaploTipus_AlIntezmeny");
            assochandler.BeforeDelete(entity, this.Owner);
            entity.Delete(true);
            assochandler.AfterDelete(entity, this.Owner);
        }
    }

    /// <summary>
    /// Az osztály elvégzi az UML modell 'Tanev -> ENaploTipus (ENaploTipus)'
    /// asszociációjának teljes kezelését.
    /// </summary>
    internal class Tanev_ENaploTipus_DA : EntityCollectionDA<Tanev, ENaploTipus>
    {
        internal protected Tanev_ENaploTipus_DA(Tanev owner)
            : base(owner)
        {
        }

        // Nincs kapcsolótábla
        private const string m_Filter = @" and (T_ENAPLOTIPUS_OSSZES.C_ALTANEVID = :pID) ";

        public override void LoadCollection(IAssociatedEntityCollection<ENaploTipus> collection)
        {
            new ENaploTipusDBHelper().LoadByPartnerId(collection, m_Filter, Owner.ID);
        }

        private static SDA.DataProvider.SDACommand CreateInsertENaploTipusCommand()
        {
            SDA.DataProvider.SDACommand result = new SDA.DataProvider.SDACommand();
            // nincs kapcsolótábla...
            result.CommandText = @"update T_ENAPLOTIPUS_OSSZES set C_ALTANEVID = :pALTANEVID where (ID = :pENAPLOTIPUSID)";
            result.Parameters.Add("pALTANEVID", SDA.DataProvider.SDADBType.Int);
            result.Parameters.Add("pENAPLOTIPUSID", SDA.DataProvider.SDADBType.Int);
            return result;
        }

        private void DoAdd(Tanev owner, ENaploTipus partner)
        {
            using (SDA.DataProvider.SDACommand command = CreateInsertENaploTipusCommand())
            {
                command.Connection = UserContext.Instance.SDAConnection;
                command.Transaction = UserContext.Instance.SDATransaction;
                command.Parameters["pALTANEVID"].Value = owner.ID;
                command.Parameters["pENAPLOTIPUSID"].Value = partner.ID;
                command.ExecuteNonQuery();
            }
        }

        public override void AddItem(ENaploTipus entity)
        {
            var assochandler = AssociationHandlerManager.Create<ENaploTipus, Tanev>("ENaploTipus_AlTanev");
            assochandler.BeforeInsert(entity, this.Owner);
            entity.ModifyAlTanev(this.Owner);
            if (entity.State == EntityState.Modified)
            {
                entity.UpdateAssociations(true);
            }
            else
            {
                entity.Insert(true);
            }
            assochandler.AfterInsert(entity, this.Owner);
        }

        private static SDA.DataProvider.SDACommand CreateDeleteENaploTipusCommand()
        {
            SDA.DataProvider.SDACommand result = new SDA.DataProvider.SDACommand();
            // nincs kapcsolótábla...
            result.CommandText = @"update T_ENAPLOTIPUS_OSSZES set C_ALTANEVID = null where (C_ALTANEVID = :pALTANEVID and ID = :pENAPLOTIPUSID)";
            result.Parameters.Add("pALTANEVID", SDA.DataProvider.SDADBType.Int);
            result.Parameters.Add("pENAPLOTIPUSID", SDA.DataProvider.SDADBType.Int);
            return result;
        }

        private void DoRemove(Tanev owner, ENaploTipus partner)
        {
            using (SDA.DataProvider.SDACommand command = CreateDeleteENaploTipusCommand())
            {
                command.Connection = UserContext.Instance.SDAConnection;
                command.Transaction = UserContext.Instance.SDATransaction;
                command.Parameters["pALTANEVID"].Value = owner.ID;
                command.Parameters["pENAPLOTIPUSID"].Value = partner.ID;
                command.ExecuteNonQuery();
            }
        }

        public override void DeleteItem(ENaploTipus entity)
        {
            var assochandler = AssociationHandlerManager.Create<ENaploTipus, Tanev>("ENaploTipus_AlTanev");
            assochandler.BeforeDelete(entity, this.Owner);
            entity.Delete(true);
            assochandler.AfterDelete(entity, this.Owner);
        }
    }

}