Я создаю очень простое веб-приложение для своей компании, в котором я перечисляю кучу записей претензий.Я успешно разместил приложение, а также заполненную базу данных 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)
//{
//}
}
}