Entity Framework 7 .Net 5 MVC 6의 기존 데이터베이스 포함

asp.net-core-mvc c# entity-framework-core

문제

안녕하세요, 저는 Entity Framework 7 MVC 6을 사용하여 기존 데이터베이스에서 데이터를 가져 오는 데 문제가 있습니다. ( 여기에 프로젝트 코드를 게시했습니다.) 적절한 연결 문자열을 사용하여 appsettings.json을 설정했습니다.

"Data": {
    "DefaultConnection": {
        "ConnectionString": "Data Source=localhost;Initial Catalog=Demo;Integrated Security=True"
}

내 사용자 정의 컨텍스트가 있습니다.

"Data": {
    "DefaultConnection": {
        "ConnectionString": "Data Source=localhost;Initial Catalog=Demo;Integrated Security=True"
}

두 Poco 클래스 :

"Data": {
    "DefaultConnection": {
        "ConnectionString": "Data Source=localhost;Initial Catalog=Demo;Integrated Security=True"
}

그리고 startup.cs에서 서비스를 설정하고 있습니다.

"Data": {
    "DefaultConnection": {
        "ConnectionString": "Data Source=localhost;Initial Catalog=Demo;Integrated Security=True"
}

내 사용자 컨트롤러 :

"Data": {
    "DefaultConnection": {
        "ConnectionString": "Data Source=localhost;Initial Catalog=Demo;Integrated Security=True"
}

사용자 / 색인 페이지로 이동하면 목록 줄에서 다음 오류가 계속 발생합니다.

$ 예외 { "개체 참조가 개체의 인스턴스로 설정되지 않았습니다."} System.NullReferenceException

어떤 이유로 데이터베이스에서 정보를 가져 오지 않습니다. Microsoft SQLServer 2014에서 만듭니다. 그리고 사용자 테이블에 데이터가 있습니다. 단계가 누락되었거나 잘못된 방식으로 데이터에 액세스하려고합니까?

수락 된 답변

주요 문제는 다음을 사용하여 해결할 수 있습니다.

public UsersController([FromServices] DatabaseContext context)
{
    _context = context;
}

대신에

public UsersController([FromServices] DatabaseContext context)
{
    _context = context;
}

사용할 수 있습니다.

public UsersController([FromServices] DatabaseContext context)
{
    _context = context;
}

하지만 하나는 생성자 public UsersController(DatabaseContext context)제거 해야합니다. 마지막 방법은 권장되지 않습니다. 왜냐하면 RC2가 두 번째 방법을 버렸기 때문입니다. 발표를 참조하십시오.

위의 변경 사항은 사용자가 가지고있는 첫 번째 문제점을 수정하지만 UsersCustomers 테이블의 Updated 필드에 NULL 값이 포함되어 있기 때문에 사용하는 데이터베이스와 테스트 데이터에 문제가 하나 더 NULL . 따라서 당신은

public UsersController([FromServices] DatabaseContext context)
{
    _context = context;
}

대신에

public UsersController([FromServices] DatabaseContext context)
{
    _context = context;
}

내가 추천 할 방법은 추천서의 사용법이다.

public UsersController([FromServices] DatabaseContext context)
{
    _context = context;
}

이는 주 project.json이있는 디렉토리 ( src\JenSolo )에서 실행할 수 있습니다. 나는 더 나은 독서를 위해 명령의 일부를 줄 바꿈했다. 하나는 모든 원인을 하나로 묶어야합니다. 위의 명령은 [Table("Users")]User[Table("Customers")]Customer 대신 UsersCustomers 클래스를 만들지 만이 코드를 기초로 사용하고 나중에 모든 필요한 수정을 수동으로 수행 할 수 있습니다.

업데이트 됨 : 다음 명령은 스캐 폴드 클래스를 생성하는 데 더 적합합니다.

public UsersController([FromServices] DatabaseContext context)
{
    _context = context;
}

JenSolo 프로젝트의 Class Library Bestro를 사용하기 때문입니다. ...\src\JenSolo 폴더를 현재 디렉토리로 사용하여 명령 행에서 위의 명령을 실행해야합니다. 클래스 라이브러리 프로젝트 (Bestro)에 Model 폴더가 생성됩니다. Model 폴더 의지는 많은 포함 *.cs 모든 데이터베이스 테이블에 대한 하나 개의 파일과 하나의 추가 파일 : 파일 DemoContext.cs 의 클래스가 포함되어 DemoContext 에서 파생 된 DbContext ( Demo 사용하는 데이터베이스의 이름입니다). DemoContext.cs 에서 OnConfiguring 함수를 제거하여 다음을 통해 연결 문자열을 구성 할 수 있어야합니다.

public UsersController([FromServices] DatabaseContext context)
{
    _context = context;
}

주요 프로젝트 JenSoloStartup.csConfigureServices 에 있습니다.

업데이트 : .NET Core RC2부터 dnx ef dbcontext scaffold 대신 dnx ef dbcontext scaffold 합니다.




아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.