//***************************************************************************// // Legenerálja a magadott osztályhoz tartozó DataAccessor tejles // // forráskódját // //***************************************************************************// template GenerateEntityDA(MClass as ENTITY) [BOM]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.[ProjectName].Entities { [GenerateDBHelper([ENTITY])] internal class [ENTITY.name]DA : EntityDataAccessor<[ENTITY.name]> { private static [ENTITY.name]DBHelper m_dbhelper = new [ENTITY.name]DBHelper(); protected override IEntityDBHelper<[ENTITY.name]> dbhelper { get { return m_dbhelper; } } #region Load [GenerateLoadByID([ENTITY])] [GenerateLoadBaseSet([ENTITY])] #endregion [GenerateInsertEntity([ENTITY])] [GenerateUpdateEntity([ENTITY])] [GenerateDeleteEntity([ENTITY])] [GenerateUpdateAssociations([ENTITY])] #region Asszociációkkal kapcsolatos adatbázisműveletek (entitásspecifikus) [GenerateEntityLoaders([ENTITY])] #endregion } [GenerateEntityCollectionDAs([ENTITY])] } end template template GenerateDynamicColums(MClass, entityname) [loop (MClass->MAttribute)] { "[MAttribute.name]", "[ConvertNameToSQLTableName([entityname])].[ConvertNameToSQLColumnName([MAttribute.name])]" }, [end loop] [if (IsMasterEntity([MClass]) == "false")] [loop (MClass -> SuperClass as MBaseClass)] [if (GetInheritance([MClass]) == "tpc")] [GenerateDynamicColums([MBaseClass], [MClass.name])][break] [else] [GenerateDynamicColums([MBaseClass], [MBaseClass.name])][break] [end if] [end loop] [end if] end template //***************************************************************************// //***************************************************************************// template GenerateDBHelper(MClass as ENTITY) internal sealed class [ENTITY.name]DBHelper : EntityDBHelper<[ENTITY.name]> { private Dictionary dynamicColumns = new Dictionary() { [GenerateDynamicColums([ENTITY], [ENTITY.name])] }; private const string dynamicQueryCommandText = "select " + "[ConvertNameToSQLTableName([ENTITY.name])].ID, " + "{COLUMNS}" + [GenerateDynamicFieldListWithBaseClassFields([ENTITY], [ENTITY.name])] "from " + "[ConvertNameToSQLTableName([ENTITY.name])] " + [loop (ENTITY -> SuperClass as MBaseClass)] "[GenerateSuperClassTableList([ENTITY])] " + [break] [end loop] "where " + "(1 = 1) "; private const string emptyQueryCommandText = "select " + "[ConvertNameToSQLTableName([ENTITY.name])].ID, " + [GenerateFieldListWithBaseClassFields([ENTITY], [ENTITY.name])] "from " + "[ConvertNameToSQLTableName([ENTITY.name])] " + [loop (ENTITY -> SuperClass as MBaseClass)] "[GenerateSuperClassTableList([ENTITY])] " + [break] [end loop] "where " + "(1 = 1) "; public override string EmptyQueryCommandText { get { return emptyQueryCommandText; } } public override string DynamicQueryCommandText { get { return dynamicQueryCommandText; } } public override IDictionary DynamicColumns { get { return dynamicColumns; } } protected override [ENTITY.name] CreateEntityInstance() { return [ENTITY.name].GiveAnInstance(); } #region Lekérdezés public override void LoadEntityFields([ENTITY.name] entity, [GetCSharpSQLDataReaderType()] reader) { [GenerateLoadEntityCore([ENTITY], 1, "entity", "reader")] } public override void LoadEntityFields([ENTITY.name] entity, [GetCSharpSQLDataReaderType()] reader, ColumnFilterMode columnFilterMode, IEnumerable columns) { int index = 1; if (columns == null) { columns = new List(index); } [GenerateDynamicLoadEntityCore([ENTITY], "entity", "reader")] } #endregion #region Paraméter kötés public override void BindAttributes([ENTITY.name] entity, [GetCSharpSQLCommandType()] command) { [if (GetInheritance([ENTITY]) == "tpc")] [loop (ENTITY -> SuperClass as MBaseClass)] [loop (MBaseClass -> MAttribute as ATTRIBUTE where [ATTRIBUTE.name] != [MBaseClass.name])] [if (IsComputedAttribute([ATTRIBUTE]) == _False())] [if (IsAttributeRequired([ATTRIBUTE]) == _True())] DAUtil.BindParameter(command, "[ConvertNameToCommandParameterName([ATTRIBUTE.name])]", [GetCSharpDatasetType([ATTRIBUTE.type],IsAttributeUnicode([ATTRIBUTE]))][SDA_GetFieldLength([ATTRIBUTE])], entity.m_[ATTRIBUTE.name], false); [else] DAUtil.BindParameter(command, "[ConvertNameToCommandParameterName([ATTRIBUTE.name])]", [GetCSharpDatasetType([ATTRIBUTE.type],IsAttributeUnicode([ATTRIBUTE]))][SDA_GetFieldLength([ATTRIBUTE])], entity.m_[ATTRIBUTE.name], entity.m_[ATTRIBUTE.name] == null); [end if] [end if] [end loop] [end loop] [end if] [loop (ENTITY -> MAttribute as ATTRIBUTE where [ATTRIBUTE.name] != [ENTITY.name])] [if (IsAttributeRequired([ATTRIBUTE]) == _True())] DAUtil.BindParameter(command, "[ConvertNameToCommandParameterName([ATTRIBUTE.name])]", [GetCSharpDatasetType([ATTRIBUTE.type],IsAttributeUnicode([ATTRIBUTE]))][SDA_GetFieldLength([ATTRIBUTE])], entity.m_[ATTRIBUTE.name], false); [else] DAUtil.BindParameter(command, "[ConvertNameToCommandParameterName([ATTRIBUTE.name])]", [GetCSharpDatasetType([ATTRIBUTE.type],IsAttributeUnicode([ATTRIBUTE]))][SDA_GetFieldLength([ATTRIBUTE])], entity.m_[ATTRIBUTE.name], entity.m_[ATTRIBUTE.name] == null); [end if] [end loop] } public override void DynamicBindAttributes([ENTITY.name] entity, [GetCSharpSQLCommandType()] command) { System.Text.StringBuilder sb = new System.Text.StringBuilder(); [if (GetInheritance([ENTITY]) == "tpc")] [loop (ENTITY -> SuperClass as MBaseClass)] [loop (MBaseClass -> MAttribute as ATTRIBUTE where [ATTRIBUTE.name] != [MBaseClass.name])] [if (IsComputedAttribute([ATTRIBUTE]) == _False())] if (entity.HasChangedas("[ATTRIBUTE.name]")) { sb.Append("[ConvertNameToSQLColumnName([ATTRIBUTE.name])] = :[ConvertNameToCommandParameterName([ATTRIBUTE.name])],"); [if (IsAttributeRequired([ATTRIBUTE]) == _True())] DAUtil.BindParameter(command, "[ConvertNameToCommandParameterName([ATTRIBUTE.name])]", [GetCSharpDatasetType([ATTRIBUTE.type],IsAttributeUnicode([ATTRIBUTE]))][SDA_GetFieldLength([ATTRIBUTE])], entity.m_[ATTRIBUTE.name], false); [else] DAUtil.BindParameter(command, "[ConvertNameToCommandParameterName([ATTRIBUTE.name])]", [GetCSharpDatasetType([ATTRIBUTE.type],IsAttributeUnicode([ATTRIBUTE]))][SDA_GetFieldLength([ATTRIBUTE])], entity.m_[ATTRIBUTE.name], entity.m_[ATTRIBUTE.name] == null); [end if] } [end if] [end loop] [end loop] [end if] [loop (ENTITY -> MAttribute as ATTRIBUTE where [ATTRIBUTE.name] != [ENTITY.name])] [if (IsComputedAttribute([ATTRIBUTE]) == _False())] if (entity.HasChanged("[ATTRIBUTE.name]")) { sb.Append("[ConvertNameToSQLColumnName([ATTRIBUTE.name])] = :[ConvertNameToCommandParameterName([ATTRIBUTE.name])],"); [if (IsAttributeRequired([ATTRIBUTE]) == _True())] DAUtil.BindParameter(command, "[ConvertNameToCommandParameterName([ATTRIBUTE.name])]", [GetCSharpDatasetType([ATTRIBUTE.type],IsAttributeUnicode([ATTRIBUTE]))][SDA_GetFieldLength([ATTRIBUTE])], entity.m_[ATTRIBUTE.name], false); [else] DAUtil.BindParameter(command, "[ConvertNameToCommandParameterName([ATTRIBUTE.name])]", [GetCSharpDatasetType([ATTRIBUTE.type],IsAttributeUnicode([ATTRIBUTE]))][SDA_GetFieldLength([ATTRIBUTE])], entity.m_[ATTRIBUTE.name], entity.m_[ATTRIBUTE.name] == null); [end if] } [end if] [end loop] command.CommandText = command.CommandText.Replace("{COLUMNS}", sb.ToString()); } public override void BindAssociations([ENTITY.name] entity, [GetCSharpSQLCommandType()] command) { [if (GetInheritance([ENTITY]) == "tpc")] [loop (ENTITY -> SuperClass as MBaseClass)] [loop (MBaseClass -> Role as STARTROLE -> MAssociation as CURRENTASSOCIATION -> MAssociationEnd as ENDROLE -> MClass as PARTNERCLASS where (([STARTROLE.id] != [ENDROLE.id]) and GetStereoType([PARTNERCLASS]) == "Entity"))] [if (HasAssociationClass([CURRENTASSOCIATION]) == "")] [if ([ENDROLE.multiplicity] == "1")] DAUtil.BindIdParameter(command, "[ConvertNameToCommandParameterName(ConvertRoleToName([ENDROLE]))]", entity.Internal[ConvertRoleToName([ENDROLE])]); [else] [if ([ENDROLE.multiplicity] == "0..1")] [if (([STARTROLE.multiplicity] == "1..*") or ([STARTROLE.multiplicity] == "*") or ([STARTROLE.multiplicity] == "0..*"))] DAUtil.BindIdParameter(command, "[ConvertNameToCommandParameterName(ConvertRoleToName([ENDROLE]))]", entity.Internal[ConvertRoleToName([ENDROLE])]); [end if] [end if] [end if] [end if] [end loop] [end loop] [end if] [loop (ENTITY -> Role as STARTROLE -> MAssociation as CURRENTASSOCIATION -> MAssociationEnd as ENDROLE -> MClass as PARTNERCLASS where (([STARTROLE.id] != [ENDROLE.id]) and GetStereoType([PARTNERCLASS]) == "Entity"))] [if (HasAssociationClass([CURRENTASSOCIATION]) == "")] [if ([ENDROLE.multiplicity] == "1")] DAUtil.BindIdParameter(command, "[ConvertNameToCommandParameterName(ConvertRoleToName([ENDROLE]))]", entity.Internal[ConvertRoleToName([ENDROLE])]); [else] [if ([ENDROLE.multiplicity] == "0..1")] [if (([STARTROLE.multiplicity] == "1..*") or ([STARTROLE.multiplicity] == "*") or ([STARTROLE.multiplicity] == "0..*"))] DAUtil.BindIdParameter(command, "[ConvertNameToCommandParameterName(ConvertRoleToName([ENDROLE]))]", entity.Internal[ConvertRoleToName([ENDROLE])]); [end if] [end if] [end if] [end if] [end loop] [loop (ENTITY -> MAssociation as CURRENTASSOCIATION -> MAssociationEnd as STARTROLE -> MClass as STARTCLASS where (GetStereoType([STARTCLASS]) == "Entity"))] [loop (CURRENTASSOCIATION -> MAssociationEnd as ENDROLE -> MClass as ENDCLASS where([STARTROLE.id] < [ENDROLE.id] and GetStereoType([ENDCLASS]) == "Entity" ))] DAUtil.BindIdParameter(command, "[ConvertNameToCommandParameterName(ConvertRoleToName([ENDROLE]))]", entity.[ConvertRoleToName([ENDROLE])]); DAUtil.BindIdParameter(command, "[ConvertNameToCommandParameterName(ConvertRoleToName([STARTROLE]))]", entity.[ConvertRoleToName([STARTROLE])]); [end loop] [end loop] } #endregion } end template //***************************************************************************// // Legenerálja egy adott entitás lekérdezéseit, összerendeléseit, // // szétkapcsolásait. // //***************************************************************************// template GenerateEntityLoaders(MClass as ENTITY) #region Mint asszociációs osztály [loop (ENTITY -> MAssociation as CURRENTASSOCIATION -> MAssociationEnd as STARTROLE -> MClass as STARTCLASS where (GetStereoType([STARTCLASS]) == "Entity"))] [loop (CURRENTASSOCIATION -> MAssociationEnd as ENDROLE -> MClass as ENDCLASS where([STARTROLE.id] < [ENDROLE.id] and GetStereoType([ENDCLASS]) == "Entity" ))] [if (([STARTROLE.multiplicity] == "0..1") or ([STARTROLE.multiplicity] == "1"))] private const string m_LoadBy[DefineRoleName([ENDROLE])]Filter = @" and ([ConvertNameToSQLTableName([ENTITY.name])].[ConvertNameToSQLColumnName(ConvertRoleToName([ENDROLE]))] = :[ConvertNameToCommandParameterName("ID")]) "; \[Obsolete("Teszteletlen, Cimby-t értesíteni kell erről, de azonnal!")\] public bool LoadBy[DefineRoleName([ENDROLE])]([ENDCLASS.name] partner, [ENTITY.name] entity) { return dbhelper.LoadByPartnerId(entity, m_LoadBy[ConvertRoleToName([ENDROLE])]Filter, partner.ID); } [end if] [if (([ENDROLE.multiplicity] == "0..1") or ([ENDROLE.multiplicity] == "1"))] private const string m_LoadBy[DefineRoleName([STARTROLE])]Filter = @" and ([ConvertNameToSQLTableName([ENTITY.name])].[ConvertNameToSQLColumnName(ConvertRoleToName([STARTROLE]))] = :[ConvertNameToCommandParameterName("ID")]) "; public bool LoadBy[DefineRoleName([STARTROLE])]([STARTCLASS.name] partner, [ENTITY.name] entity) { return dbhelper.LoadByPartnerId(entity, m_LoadBy[DefineRoleName([STARTROLE])]Filter, partner.ID); } [end if] [end loop] [end loop] #endregion [loop (ENTITY -> Role as STARTROLE -> MAssociation as CURRENTASSOCIATION -> MAssociationEnd as ENDROLE -> MClass as PARTNERCLASS where (([STARTROLE.id] != [ENDROLE.id]) and GetStereoType([PARTNERCLASS]) == "Entity"))] [if (HasAssociationClass([CURRENTASSOCIATION]) == "")] [if ([STARTROLE.multiplicity] == "1" or [STARTROLE.multiplicity] == "0..1")] [if ([ENDROLE.multiplicity] == "1")] // a kapcsolómező nálunk van private const string m_LoadBy[ConvertRoleToName([ENDROLE])]Filter = @" and ([ConvertNameToSQLTableName([ENTITY.name])].[ConvertNameToSQLColumnName(ConvertRoleToName([ENDROLE]))] = :[ConvertNameToCommandParameterName("ID")]) "; [else] [if ([STARTROLE.multiplicity] == "0..1" and ([ENDROLE.multiplicity] == "0..1"))] // kapcsolótábla van private const string m_LoadBy[ConvertRoleToName([ENDROLE])]Filter = @" and (exists (select 1 from [ConvertNameToSQLTableName(ConvertAssociationRolesToSwitchTableName([ENDROLE], [STARTROLE]))] where [ConvertNameToSQLColumnName(ConvertRoleToName([STARTROLE]))] = [ConvertNameToSQLTableName([ENTITY.name])].ID and [ConvertNameToSQLColumnName(ConvertRoleToName([ENDROLE]))] = :[ConvertNameToCommandParameterName("ID")])) "; [else] [if ([ENTITY.name] != [PARTNERCLASS.name])] // kapcsolómező a másik táblában van, és nem önmagára mutat private const string m_LoadBy[ConvertRoleToName([ENDROLE])]Filter = @" and (exists (select 1 from [ConvertNameToSQLTableName([PARTNERCLASS.name])] where [ConvertNameToSQLColumnName(ConvertRoleToName([STARTROLE]))] = [ConvertNameToSQLTableName([ENTITY.name])].ID and [ConvertNameToSQLTableName([PARTNERCLASS.name])].ID = :[ConvertNameToCommandParameterName("ID")])) "; [else] // önmagára mutat private const string m_LoadBy[ConvertRoleToName([ENDROLE])]Filter = @" and (exists (select 1 from [ConvertNameToSQLTableName([PARTNERCLASS.name])] T_TEMP where T_TEMP.[ConvertNameToSQLColumnName(ConvertRoleToName([STARTROLE]))] = [ConvertNameToSQLTableName([ENTITY.name])].ID and T_TEMP.ID = :[ConvertNameToCommandParameterName("ID")])) "; [end if] [end if] [end if] public bool LoadBy[ConvertRoleToName([ENDROLE])](int id, [ENTITY.name] entity) { return dbhelper.LoadByPartnerId(entity, m_LoadBy[ConvertRoleToName([ENDROLE])]Filter, id); } [if (([STARTROLE.multiplicity] == "0..1") and ([ENDROLE.multiplicity] == "0..1"))] private const string m_Associate[DefineRoleName([ENDROLE])]CommandText = @" insert into [ConvertNameToSQLTableName(ConvertAssociationRolesToSwitchTableName([ENDROLE], [STARTROLE]))] ( [ConvertNameToSQLColumnName(ConvertRoleToName([STARTROLE]))], [ConvertNameToSQLColumnName(ConvertRoleToName([ENDROLE]))] ) values ( :[ConvertNameToCommandParameterName(ConvertRoleToName([STARTROLE]))], :[ConvertNameToCommandParameterName(ConvertRoleToName([ENDROLE]))] )"; public void Associate[DefineRoleName([ENDROLE])]([ENTITY.name] entity, [PARTNERCLASS.name] partner) { using([GetCSharpSQLCommandType()] command = DAUtil.CreateCommand(m_Associate[DefineRoleName([ENDROLE])]CommandText)) { command.Parameters.Add("[ConvertNameToCommandParameterName(ConvertRoleToName([STARTROLE]))]", [GetCSharpSQLIDType()]).Value = entity.ID; command.Parameters.Add("[ConvertNameToCommandParameterName(ConvertRoleToName([ENDROLE]))]", [GetCSharpSQLIDType()]).Value = partner.ID; command.ExecuteNonQuery(); // EntityDA.tdl 207 } } private const string m_DeAssociate[DefineRoleName([ENDROLE])]CommandText = @" delete from [ConvertNameToSQLTableName(ConvertAssociationRolesToSwitchTableName([ENDROLE], [STARTROLE]))] where ([ConvertNameToSQLColumnName(ConvertRoleToName([STARTROLE]))] = :[ConvertNameToCommandParameterName(ConvertRoleToName([STARTROLE]))])"; public void DeAssociate[DefineRoleName([ENDROLE])]([ENTITY.name] entity) { using([GetCSharpSQLCommandType()] command = DAUtil.CreateCommand(m_DeAssociate[DefineRoleName([ENDROLE])]CommandText)) { command.Parameters.Add("[ConvertNameToCommandParameterName(ConvertRoleToName([STARTROLE]))]", [GetCSharpSQLIDType()]).Value = entity.ID; command.ExecuteNonQuery(); // EntityDA.tdl 219 } } [end if] [end if] [end if] [end loop] [loop (ENTITY -> MAssociation as CURRENTASSOCIATION -> MAssociationEnd as STARTROLE -> MClass as STARTCLASS where (GetStereoType([STARTCLASS]) == "Entity"))] [loop (CURRENTASSOCIATION -> MAssociationEnd as ENDROLE -> MClass as ENDCLASS where([STARTROLE.id] < [ENDROLE.id] and GetStereoType([ENDCLASS]) == "Entity" ))] public bool LoadBy[DefineRoleName([STARTROLE])]([STARTCLASS.name] start, [ENDCLASS.name] end, [ENTITY.name] entity) { using ([GetCSharpSQLCommandType()] command = dbhelper.CreateEmptyQueryCommand()) { command.CommandText += @" and ([ConvertNameToSQLColumnName(ConvertRoleToName([STARTROLE]))] = :[ConvertNameToCommandParameterName(ConvertRoleToName([STARTROLE]))]) and ([ConvertNameToSQLColumnName(ConvertRoleToName([ENDROLE]))] = :[ConvertNameToCommandParameterName(ConvertRoleToName([ENDROLE]))]) "; command.Parameters.Add("[ConvertNameToCommandParameterName(ConvertRoleToName([STARTROLE]))]", [GetCSharpSQLIDType()]).Value = start.ID; command.Parameters.Add("[ConvertNameToCommandParameterName(ConvertRoleToName([ENDROLE]))]", [GetCSharpSQLIDType()]).Value = end.ID; return dbhelper.LoadSingleEntity(entity, command); // EntityDA.tdl 457 } } public bool LoadBy[DefineRoleName([ENDROLE])]([ENDCLASS.name] start, [STARTCLASS.name] end, [ENTITY.name] entity) { return this.LoadBy[DefineRoleName([STARTROLE])](end, start, entity); } [end loop] [end loop] end template