public static RIdentity Db_GetOrCreate(this CsspIdentity packet, AtSackChristianService db, out bool created)
		{
			created = false;
			var rUser = ParseRUser(packet, db);
			var applicationRelease = ParseApplicationRelease(packet, db);

			string selector = $"{RIdentitysTable.RUserIdCol} = '{rUser.Id}' AND {RIdentitysTable.RApplicationReleaseIdCol} = '{applicationRelease.Id}'";

			var identity = db.RIdentitys.Select(selector).FirstOrDefault() ?? db.RIdentitys.DownloadRows($"SELECT {db.RIdentitys.DefaultSqlSelector} FROM {RIdentitysTable.NativeName} WHERE {selector}").FirstOrDefault();

			if (identity == null)
			{
				created = true;
				identity = db.RIdentitys.NewRow();
				identity.ApplicationRelease = applicationRelease;
				identity.RUser = rUser;
				db.RIdentitys.Add(identity);
				applicationRelease.IdentitysCount++;

				foreach (var webUser in db.WebUsers.Where(x => x.IsAdmin))
				{
					var accessRole = db.RIdentityAccessRoles.NewRow();
					accessRole.WebUser = webUser;
					accessRole.RIdentity = identity;
					accessRole.Table.Add(accessRole);
				}
			}

			applicationRelease.Application.LatestRPacket = applicationRelease.LatestRPacket = rUser.LatestRPacket = rUser.RComputer.LatestRPacket = identity.LatestRPacket = DateTime.Now;
			identity.ReceivedRPackets++;
			rUser.ReceivedRPackets++;
			rUser.RComputer.ReceivedRPackets++;
			applicationRelease.ReceivedRPackets++;
			applicationRelease.Application.ReceivedRPackets++;

			return identity;
		}
		/// <summary>
		///     Loads the complete data bundle of the current row into a target data set.
		///     <para>A data bundle is defined as a set of all rows inside a database which are connected via relations.</para>
		///     <para>The currently selected row is the root of the bundle</para>
		/// </summary>
		public void Copy_BundledData_Into_DataSet(AtSackChristianService target)
		{
			base.Copy_BundledData_Into_DataSet(target);
		}
		private static Application ParseApplication(CsspIdentity packet, AtSackChristianService db)
		{
			var application = db.Applications.FindOrLoad(packet.ApplicationId);
			if (application != null)
				return application;


			application = db.Applications.NewRow();
			packet.CopyInto(application);

			db.Applications.Add(application);
			return application;
		}
		private static ApplicationRelease ParseApplicationRelease(CsspIdentity packet, AtSackChristianService db)
		{
			var selector = $"{ApplicationReleasesTable.ApplicationIdCol} = '{packet.ApplicationId}' AND {ApplicationReleasesTable.VersionCol} LIKE '{packet.ApplicationVersion}'";
			var localReleases = db.ApplicationReleases.Select(selector);


			var appRelease = localReleases.Length == 0 ? null : localReleases[0];
			if (appRelease != null)
				return appRelease;


			var remoteReleases = db.ApplicationReleases.DownloadRows($"SELECT {db.ApplicationReleases.DefaultSqlSelector} FROM {ApplicationReleasesTable.NativeName} WHERE {selector}");
			appRelease = remoteReleases.Length == 0 ? null : remoteReleases[0];
			if (appRelease != null)
				return appRelease;


			appRelease = db.ApplicationReleases.NewRow();
			packet.CopyInto(appRelease);

			appRelease.Application = ParseApplication(packet, db);
			db.ApplicationReleases.Add(appRelease);
			return appRelease;
		}
		private static RComputer ParseRComputer(CsspIdentity packet, AtSackChristianService db)
		{
			var computer = db.RComputers.FindOrLoad(packet.ComputerId);
			if (computer != null)
				return computer;

			computer = db.RComputers.NewRow();
			packet.CopyInto(computer);
			db.RComputers.Add(computer);
			return computer;
		}
		private static RUser ParseRUser(CsspIdentity packet, AtSackChristianService db)
		{
			var rUser = db.RUsers.FirstOrDefault(user => user.Sid.Equals(packet.UserSid, StringComparison.OrdinalIgnoreCase) && user.ComputerId == packet.ComputerId);
			if (rUser != null)
				return rUser;

			var rows = db.RUsers.DownloadRows($"SELECT {db.RUsers.DefaultSqlSelector} FROM {RUsersTable.NativeName} WHERE UPPER({RUsersTable.SidCol}) LIKE UPPER('{CsDbTableBase.SqlParam(packet.UserSid)}') AND {RUsersTable.ComputerIdCol} = '{packet.ComputerId}'");
			if (rows.Length != 0)
				return rows[0];
			rUser = db.RUsers.NewRow();
			packet.CopyInto(rUser);

			rUser.RComputer = ParseRComputer(packet, db);
			db.RUsers.Add(rUser);
			return rUser;
		}