public uint GetItemClass(uint itemTemplateId) { var query = _worldContext.CreateNoTrackingQuery(_worldContext.ItemTemplateItemClassEntries); var result = query.FirstOrDefault(e => e.ItemTemplateId == itemTemplateId); if (result == null) { throw new EntityNotFoundException(nameof(ItemTemplateItemClassEntry), nameof(ItemTemplateItemClassEntry.ItemTemplateId), itemTemplateId); } return(result.ItemClass); }
private RandomNameEntry GetRandomNameEntry(Gender gender, NameType nameType) { var query = _worldContext.CreateNoTrackingQuery(_worldContext.RandomNameEntries); // This is not the fastest implementation, as the random evaluation is done on client side to be DBMS agnostic. // Execution is still so fast that no wait time occurs in the client. // An alternative but more complex way would be to load count per name type (first/male, first/female, last), // get a random between 0 and the count and call "query.Skip(random).FirstOrDefault();" // This is possible, as the random names provided by the database don't change (at runtime). var randomEntry = query .Where(e => e.Type == (byte)nameType) .Where(e => e.Gender == (byte)gender || e.Gender == (byte)Gender.Neutral) .AsEnumerable() .OrderBy(e => Guid.NewGuid()) .FirstOrDefault(); return(randomEntry); }