public async override Task <Yngdieng.Admin.V1.Protos.Word> GetWord(GetWordRequest request,
                                                                           ServerCallContext context)
        {
            if (string.IsNullOrEmpty(request.Name))
            {
                throw new RpcException(new Status(StatusCode.InvalidArgument, "name must not be empty"));
            }
            var wordRef = ResourceNames.ToWordRef(request.Name);

            return(Renderers.ToWord(
                       await _dbContext.Words.Where(w => w.WordId == wordRef.WordId).SingleAsync(),
                       await _dbContext.Prons.Where(p => p.WordId == wordRef.WordId)
                       .Select(p => new PronRef {
                WordId = wordRef.WordId, PronId = p.PronId
            })
                       .ToListAsync()
                       ));
        }
        public async override Task <Yngdieng.Admin.V1.Protos.Pron> CreatePron(CreatePronRequest request,
                                                                              ServerCallContext context)
        {
            if (request.Pron == null)
            {
                throw new RpcException(new Status(StatusCode.InvalidArgument, "pron must be set"));
            }
            if (string.IsNullOrEmpty(request.Pron.Pronunciation))
            {
                throw new RpcException(new Status(StatusCode.InvalidArgument, "pron.pronunciation must not be empty"));
            }
            var wordRef = ResourceNames.ToWordRef(request.Parent);

            if (!await _dbContext.Words.Where(w => w.WordId == wordRef.WordId).AnyAsync())
            {
                throw new RpcException(new Status(StatusCode.FailedPrecondition, $"Word {request.Parent} does not exist"));
            }
            var newPron = new Db.Pron
            {
                WordId         = wordRef.WordId,
                Pronunciation  = request.Pron.Pronunciation,
                Weight         = request.Pron.Weight,
                SandhiCategory = ProtoSCToDbSC[request.Pron.SandhiCategory],
                Variant        = ProtoVariantToDbVariant[request.Pron.Variant],
            };

            _dbContext.Prons.Add(newPron);
            try
            {
                await _dbContext.SaveChangesAsync();
            }
            catch (DbUpdateException e)
            {
                throw new RpcException(new Status(StatusCode.FailedPrecondition, "database error", e));
            }
            return(Renderers.ToPron(newPron));
        }