Мое размещенное веб-приложение не отображает записи в представлении списка из размещенной базы данных Azure. - PullRequest
0 голосов
/ 18 июня 2019

Я создаю очень простое веб-приложение для своей компании, в котором я перечисляю кучу записей претензий.Я успешно разместил приложение, а также заполненную базу данных SQL в Azure, но в моем представлении списка не отображаются какие-либо записи (хотя он успешно загружается).

Я установил строку подключения в appsettings.jsonскопировав его из самого Azure:

"ConnectionStrings": {
"ConnectionString": "Server=tcp:MYAZURESERVER.database.windows.net,1433;Initial Catalog=ClaimTestDB;Persist Security Info=False;User ID=MYUSERNAME;Password=MYPASSWORD;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;"
},

У меня уже есть объект для заявки, а также мой файл Start.cs, имеющий ...

 public void ConfigureServices(IServiceCollection services)
    {
        services.Configure<CookiePolicyOptions>(options =>
        {
            // This lambda determines whether user consent for non-essential cookies is needed for a given request.
            options.CheckConsentNeeded = context => true;
            options.MinimumSameSitePolicy = SameSiteMode.None;
        });

        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
        services.AddDbContext<ClaimDbContext>(options =>
            options.UseSqlServer(Configuration.GetConnectionString("ConnectionString")));
        services.AddScoped<IRepository<Claim>, ClaimRepository>();
    }

... чтобы ссылаться на строку подключения и обрабатывать внедрение зависимостей.

У меня также есть ...

dbContext.Database.Migrate();

... в разделе Настройка, как я делаю, проект Code First.

Вот мой контекст БД:

using ClaimTestWebApp.Models;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace ClaimTestWebApp.Repository
{
    public class ClaimDbContext: DbContext
    {
        public ClaimDbContext(DbContextOptions<ClaimDbContext>options):base(options)
        {

        }

        public DbSet<Claim> Claims { get; set; }
    }
}

И вот моя объектная модель репозитория:

using ClaimTestWebApp.Models;
using ClaimTestWebApp.Services;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace ClaimTestWebApp.Repository
{
    public class ClaimRepository : IRepository<Claim>
    {
        private ClaimDbContext _context;
        private readonly ILogger _logger;

        public ClaimRepository(ClaimDbContext context, ILogger<ClaimRepository> logger)
        {
            _context = context;
            _logger = logger;
        }

        public Claim Get(int id)
        {
            if (_context.Claims.Count(x => x.ClaimId == id) > 0)
            {
                return _context.Claims.FirstOrDefault(x => x.ClaimId == id);
            }
            return null;
        }

        public IEnumerable<Claim> GetAll()
        {
            return _context.Claims;
        }
    }
}

Наконец, вот мой список:

@page
@using ClaimTestWebApp.Pages;
@model ListClaimsModel
@{
}

<div class="container">
    <div class="jumbotron">
        <h2 class="text-center">List of All Claims</h2>
    </div>
    <div class="row">
        <table class="table">
            <thead>
                <tr>
                    <th>
                        @Html.DisplayNameFor(x => x.Claims[0].ClaimNumber)
                    </th>
                    <th>
                        @Html.DisplayNameFor(x => x.Claims[0].CompanyName)
                    </th>
                    <th>
                        @Html.DisplayNameFor(x => x.Claims[0].ClaimStatus)
                    </th>
                    <th>
                        @Html.DisplayNameFor(x => x.Claims[0].OccurrenceDate)
                    </th>
                    <th>
                        @Html.DisplayNameFor(x => x.Claims[0].Adjuster)
                    </th>
                    <th>
                        @Html.DisplayNameFor(x => x.Claims[0].Category)
                    </th>
                    <th>
                        @Html.DisplayNameFor(x => x.Claims[0].CauseofLoss)
                    </th>
                    <th>
                        @Html.DisplayNameFor(x => x.Claims[0].PolicyNumber)
                    </th>
                    <th>
                        @Html.DisplayNameFor(x => x.Claims[0].AtlasId)
                    </th>
                    <th></th>
                </tr>
            </thead>
            <tbody>
                @foreach (var item in Model.Claims)
                {
                    <tr>
                        <td>
                            @Html.DisplayFor(x => item.ClaimNumber)
                        </td>
                        <td>
                            @Html.DisplayFor(x => item.CompanyName)
                        </td>
                        <td>
                            @Html.DisplayFor(x => item.ClaimStatus)
                        </td>
                        <td>
                            @Html.DisplayFor(x => item.OccurrenceDate)
                        </td>
                        <td>
                            @Html.DisplayFor(x => item.Adjuster)
                        </td>
                        <td>
                            @Html.DisplayFor(x => item.Category)
                        </td>
                        <td>
                            @Html.DisplayFor(x => item.CauseofLoss)
                        </td>
                        <td>
                            @Html.DisplayFor(x => item.PolicyNumber)
                        </td>
                        <td>
                            @Html.DisplayFor(x => item.AtlasId)
                        </td>
                    </tr>
                }
            </tbody>
        </table>
        <a asp-page="./ListClaims">Back to top</a>
    </div>
</div>

Первоначально я построил это, используя мой SqlLocalDB.Затем я разместил приложение в Azure, но, очевидно, он не смог подключиться к базе данных, когда попытался вызвать представление списка.Поэтому я создал базу данных SQL в Azure и скопировал ее заново.Я подтвердил, что он заполнен записями.Затем я изменил строку подключения, чтобы она указала на новую размещенную базу данных, и добавил dbContext.Database.Migrate (), чтобы он выполнял миграцию при запуске приложения.

Он успешно загружает страницу, а такжезаголовки таблиц, просто нет записей внутри.

Спасибо

РЕДАКТИРОВАТЬ # 1: Вот мой ClaimController:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using ClaimTestWebApp.Models;
using ClaimTestWebApp.Services;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;

namespace ClaimTestWebApp.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class ClaimController : ControllerBase
    {
        private readonly IRepository<Claim> _claimRepository;
        private readonly ILogger<ClaimController> _logger;

        public ClaimController(IRepository<Claim> claimRepository, ILogger<ClaimController> logger)
        {
            _claimRepository = claimRepository;

            _logger = logger;
        }


        // GET: api/Claim
        [HttpGet]
        public IEnumerable<Claim> Get()
        {
            return _claimRepository.GetAll();
        }

        // GET: api/Claim/5
        [HttpGet("{id}", Name = "Get")]
        public Claim Get(int id)
        {
            return _claimRepository.Get(id);
        }

        // POST: api/Claim
        //[HttpPost]
        //public void Post([FromBody] string value)
        //{
        //}

        // PUT: api/Claim/5
        //[HttpPut("{id}")]
        //public void Put(int id, [FromBody] string value)
        //{
        //}

        // DELETE: api/ApiWithActions/5
        //[HttpDelete("{id}")]
        //public void Delete(int id)
        //{
        //}
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...