Q & A

시삽: 레드플러스 님 
게시판 이동:
 제목 : Re : ASP.NET Core 37장 프로젝트 DB Binding 에러
글번호: 922
작성자: 레드플러스
작성일: 2021/02/17 오후 3:59:00
조회수: 3271

안녕하세요.

 

질문 주신 부분에 의심이 갈만한 부분을 찾진 못했습니다만,

 

다음 경로를 참고해서, 2군데에서 중단점 설정 후 F5 디버깅 모드로 테스트 해보시길 권장합니다.

https://github.com/VisualAcademy/DotNetNote/commit/15e3fff4c3c90a302f9d4737f1be6fccfcbb47dd

 

그리고, DotNetNoteController.cs 에서도

몇몇 의심이 가는 부분이 있다면, 해당 소스에도 F9 중단점 설정 후 F5로 실행 후

F10번을 눌러가면서 단계별로 실행을 테스트 해보세요.

 

또한, 특정 부분 소스는 이미 완성되어 있는 제 강의 소스를 붙여넣기한 후 테스트해보셔도 좋습니다.

 

그럼, 더 테스트해보시고, 추가 문의가 있으시면 주세요.

 

감사합니다.

 

 

 

 

 

 


On 2021-02-17 오후 2:42:00, '황다솔' wrote:

 

 


안녕하세요.

37장 진행중 DB연동 문제가 발생하여 문의드립니다.(첨부된 사진과 같은 예외 발생.)

검색해보니 통상 ConnectionString 타이핑 오타 등의 문제던데, 아무리찾아봐도 해결을 할수가 없어서 문의드립니다..

 

Index, Create 등 모든 뷰에서 DB 연동이 되지 않는것 같습니다.

1. 커넥션스트링의 DefaultConnection 값을 의도적으로 틀리게 입력하는 경우에는 "SqlException: A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: SQL Network Interfaces, error: 50 - Local Database Runtime error occurred. 지정된 LocalDB 인스턴스가 없습니다." 예외가 발생합니다.

2. NoteRepository의 생성자에서

con = new SqlConnection(_config.GetSection("cConnectionStrings").GetSection("DefaultConnection").Value);

이렇게 ConnectionString 값을 의도적으로 틀리게 입력하면,

An unhandled exception occurred while processing the request.

InvalidOperationException: The ConnectionString property has not been initialized.

System.Data.SqlClient.SqlConnection.PermissionDemand()

예외가 발생합니다.

 

어디가 잘못된걸까요...

교재는 asp.net core 프레임워크 버젼이 달라서 그런걸까요..

 

작성한 코드--------------------------------

1. 컨트롤러

DotNetNoteController.cs

    [HttpGet]
    public IActionResult Create()
    {
      ViewBag.FormType = BoardWriteFormType.Write;
      ViewBag.TitleDescription = "글 쓰기 - 다음 필드들을 채워주세요.";
      ViewBag.SaveButtonText = "저장";

      return View();
    }

 

2. NoteRepository 생성자

NoteRepository.cs

    public NoteRepository(IConfiguration config, ILogger<NoteRepository> logger)
    {
      _config = config;
      con = new SqlConnection(_config.GetSection("ConnectionStrings").GetSection("DefaultConnection").Value);
      _logger = logger;
    }

3. ConnectionString

appsettings.json

{
  "ConnectionStrings": {
    "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=DotNetNote;Trusted_Connection=True;"
  },
  "Data": {
    "DefaultConnection": {
      "ConnectionString": "Server=(localdb)\\mssqllocaldb;Database=DotNetNote;Trusted_Connection=True;"
    }
  },
  "Logging": {
    "LogLevel": {
      "Default": "Warning"
    }
  },
  "AllowedHosts": "*"
}
 

4. Configuration

Startup.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_1);
      services.AddSingleton<IConfiguration>(Configuration);
      services.AddTransient<INoteRepository, NoteRepository>();
      services.AddSingleton<INoteCommentRepository>(
        new NoteCommentRepository(Configuration["ConnectionStrings:DefaultConnection"]));
    }

 

5. View

_BoardEditorForm.cshtml

@model Note

<div class="form-horizontal">
  @if (ViewBag.FormType == DotNetNote.Models.BoardWriteFormType.Modify)
  {
    <div class="form-group">
      <label asp-for="Id" class="col-md-2 control-label"></label>
      <div class="col-md-10">
        <input asp-for="Id" class="form-control" style="border:0; width:100px;" maxlength="10" readonly />
        <input type="hidden" name="Id" value="@Model.Id" />
      </div>
    </div>
  }
  <div class="form-group">
    <label asp-for="Name" class="col-md-2 control-label"></label>
    <div class="col-md-10">
      <input asp-for="Name" class="form-control" style="width:150px;" maxlength="10" />
      <span asp-validation-for="Name" class="text-danger"></span>
    </div>
  </div>

 

6. 프로젝트

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>netcoreapp2.1</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Dapper" Version="2.0.78" />
    <PackageReference Include="Microsoft.AspNetCore.App" />
    <PackageReference Include="Microsoft.AspNetCore.Razor.Design" Version="2.1.2" PrivateAssets="All" />
  </ItemGroup>

  <ItemGroup>
    <ProjectReference Include="..\DotNetNote.Dul\DotNetNote.Dul.csproj" />
  </ItemGroup>

</Project>
 

 
이전 글   다음 글 삭제 수정 답변 글쓰기 리스트
  agohdasol
  2021-02-19 오후 2:22:02
감사합니다! 덕분에 문제 해결하고 디버깅방식도 배우게 되었습니다!
사실 문제는 저부분이 아니라 다른쪽 문제였더라구요..
이제 같은 예외가 발생은 하는데 정상적으로 작동이 됩니다...
Modify에서는 예외가 발생하지 않고 Write(Create)에서만 예외가 발생하는 걸로 볼 때, 글쓰기(글 데이터가 없음)시에 없는 데이터를 읽어오려고 시도해서 예외가 발생하는 것으로 이해가 됩니다.
정상적인 현상인건가요...?
  Administrator
  2021-02-19 오후 6:45:30
당연한 얘기겠지만, Create 페이지를 포함한 모든 소스에서도 예외가 발생하지 않아야 합니다.
정확한 원인은 알 수 없으니,

Create 페이지와 관련된 DotNetNoteController.cs, Create.cshtml, _BoardEditorForm.cshml 등을 제 강의소스로 변경하고 시도를 해보시는게 오류 찾는데 도움이 될 것입니다.

다른 쪽 폴더에 이미 잘 돌아가는 제 강의 소스를 설치해놓으신다음에, 직접 작성하신 부분 소스와 비교해보면서 오류를 찾아보시기를 권장해드립니다.

(댓글을 남기려면 로그인이 필요합니다.)

관련 아티클 리스트
  제       목 파일 작성자 작성일 조회
이전글 Blazor Server App 새로고침 시 메모리 증가문제 - 김효복 2021-03-02 2805
  ASP.NET Core 37장 프로젝트 DB Binding 에러 asd.jpg(141 KB) 황다솔 2021-02-17 2803
현재글 Re : ASP.NET Core 37장 프로젝트 DB Binding 에러(2) - 레드플러스 2021-02-17 3271
다음글 새해 복 많이 받으세요... - 조재문 2021-02-13 2475
 
손님 사용자 Anonymous (손님)
로그인 Home