kreta/Tools/CodeGeneration/Templates/Server/DataAccess/DataAccessor/EntityDA.tdl
2024-03-13 00:33:46 +01:00

385 lines
18 KiB
Text

//***************************************************************************//
// 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<string, string> dynamicColumns = new Dictionary<string, string>()
{
[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<string, string> 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<string> columns)
{
int index = 1;
if (columns == null)
{
columns = new List<string>(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