//***************************************************************************//
// Legenerálja a megadott entitás törlését elvégzo DA muveletet.             //
//***************************************************************************//
template GenerateDeleteEntity(MClass as ENTITY)
#region DeleteEntity

private const string m_FizikaiDeleteCommandText = @"DELETE FROM [ConvertNameToSQLTableName([ENTITY.name])] WHERE (ID = :[ConvertNameToCommandParameterName("ID")]) ";
private const string m_LogikaiDeleteCommandText = @"
UPDATE [ConvertNameToSQLTableName([ENTITY.name])] 
SET TOROLT = 'T' ,
  SERIAL = SERIAL + 1,
  [if(GetTaggedValue([ENTITY], "dkt") == "true")]
  DELETER = :[ConvertNameToCommandParameterName("Deleter")],
  DELETED = :[ConvertNameToCommandParameterName("Deleted")],
  [end if]
  LASTCHANGED = :[ConvertNameToCommandParameterName("LastChanged")],
  MODIFIER = :[ConvertNameToCommandParameterName("Modifier")]
WHERE (ID = :[ConvertNameToCommandParameterName("ID")]) ";

public override void DeleteEntity([ENTITY.name] entity, bool logikai = true)
{
	var _deleteCommandText = logikai ? m_LogikaiDeleteCommandText : m_FizikaiDeleteCommandText;
    using ([GetCSharpSQLCommandType()] command = DAUtil.CreateCommand(_deleteCommandText))
    {
        command.Parameters.Add("[ConvertNameToCommandParameterName("ID")]", [GetCSharpSQLIDType()]).Value = entity.ID;

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

            command.Parameters.Add("[ConvertNameToCommandParameterName("LastChanged")]", [GetCSharpDatasetType("DateTime", "")]).Value = lastchanged;
            command.Parameters.Add("[ConvertNameToCommandParameterName("Modifier")]", [GetCSharpSQLIDType()]).Value = modifier;
      [if(GetTaggedValue([ENTITY], "dkt") == "true")]
            command.Parameters.Add("[ConvertNameToCommandParameterName("Deleted")]", [GetCSharpDatasetType("DateTime", "")]).Value = lastchanged;
            command.Parameters.Add("[ConvertNameToCommandParameterName("Deleter")]", [GetCSharpSQLIDType()]).Value = modifier;
      [end if]
		}

        if (command.ExecuteNonQuery() != 1)
		{
			throw new EntityNotFoundException("[ENTITY.name]", entity.ID);
		}
    }

    [if (IsMasterEntity([ENTITY]) == "false" && GetInheritance([ENTITY]) != "tpc")]

    entity.InheritedDA.DeleteEntity(entity, logikai);
    [end if]
}

[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"))]
private const string m_DeleteBy[DefineRoleName([STARTROLE])]And[DefineRoleName([ENDROLE])]CommandText = @"
delete from [ConvertNameToSQLTableName([ENTITY.name])]
where
([ConvertNameToSQLColumnName(ConvertRoleToName([STARTROLE]))] = :[ConvertNameToCommandParameterName(ConvertRoleToName([STARTROLE]))])
and
([ConvertNameToSQLColumnName(ConvertRoleToName([ENDROLE]))] = :[ConvertNameToCommandParameterName(ConvertRoleToName([ENDROLE]))]) ";

public void DeleteBy[DefineRoleName([STARTROLE])]And[DefineRoleName([ENDROLE])](int [ConvertRoleToName([STARTROLE])], int [ConvertRoleToName([ENDROLE])])
{
    using ([GetCSharpSQLCommandType()] command = DAUtil.CreateCommand(m_DeleteBy[DefineRoleName([STARTROLE])]And[DefineRoleName([ENDROLE])]CommandText))
    {
        command.Parameters.Add("[ConvertNameToCommandParameterName(ConvertRoleToName([STARTROLE]))]", [GetCSharpSQLIDType()]).Value = [ConvertRoleToName([STARTROLE])];
        command.Parameters.Add("[ConvertNameToCommandParameterName(ConvertRoleToName([ENDROLE]))]", [GetCSharpSQLIDType()]).Value = [ConvertRoleToName([ENDROLE])];
        command.ExecuteNonQuery();
    }
}

    [end loop]
[end loop]
#endregion
end template