내 모델에 단일 이름이 필요한 경우 Entity Framework가 MySQL의 테이블 이름을 복수형으로 만드는 이유는 무엇입니까?

DDD
풀어 주다: 2024-10-29 09:25:30
원래의
352명이 탐색했습니다.

Why Does Entity Framework Pluralize Table Names in MySQL When My Model Expects a Singular Name?

Entity Framework 테이블 이름 복수화 불일치

Entity Framework(EF)는 모델 클래스 이름이 단일 엔터티를 나타내는 규칙에 따라 테이블 이름을 자동으로 복수화하도록 설계되었습니다. 그러나 어떤 경우에는 모델이나 뷰가 단수형 이름을 요구하는 동안 EF가 복수형 테이블 이름을 생성하는 불일치가 발생할 수 있습니다.

문제:

제공된 테이블 이름 코드는 Vote라는 모델을 정의하고 MySQL에서 "vote"라는 테이블을 기대합니다. 그러나 EF는 대신 "votes"라는 테이블을 만듭니다. 뷰에서 테이블에 액세스하려고 하면 "투표" 테이블이 존재하지 않는다는 예외가 발생합니다.

가능한 원인:

MySQL .NET 커넥터 EF의 테이블 이름 복수화 규칙을 완전히 지원하지 않을 수 있습니다.

해결책:

이 문제를 해결하려면 EF에서 테이블 이름 복수화 동작을 사용자 정의할 수 있습니다. 단계는 다음과 같습니다.

1. OnModelCreating 메서드 사용자 지정:

DbContext 클래스에서 OnModelCreating 메서드를 재정의하고 PluralizingTableNameConvention을 비활성화합니다.

<code class="csharp">protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}</code>
로그인 후 복사

2. 초기 데이터베이스 생성 제거:

Entity Framework 초기화 프로그램을 사용하여 데이터베이스를 생성하고 초기화할 수 있습니다. 그러나 MySQL의 .NET 커넥터에서는 EF가 데이터베이스를 생성하는 것을 허용하지 않을 수 있습니다. 이 문제를 방지하려면 EF가 데이터베이스 생성을 시도하기 전에 데이터베이스가 존재하는지 확인하세요.

<code class="csharp">// Remove database creation initializer
// Database.SetInitializer(new DropCreateDatabaseAlways<myDB>());</code>
로그인 후 복사

3. 기본 모델 생성 호출 중지:

OnModelCreating의 기본 구현이 호출되지 않았는지 확인하세요. 사용자 정의가 재정의되고 테이블 이름 복수화를 다시 활성화할 수 있기 때문입니다.

<code class="csharp">// Don't call the base implementation
// base.OnModelCreating(modelBuilder);</code>
로그인 후 복사

4. 존재하지 않는 경우 데이터베이스 생성:

데이터베이스가 존재하지 않는 경우 수동으로 생성합니다. 이렇게 하면 EF가 누락된 테이블 예외가 발생하지 않고 올바른 테이블 이름을 사용할 수 있습니다.

추가 팁:

  • [Table] 속성을 사용하여 명시적으로 지정합니다. 필요한 경우 테이블 이름.
  • EF의 테이블 이름 규칙을 완벽하게 지원하는 다른 데이터베이스 공급자 사용을 고려하세요.

이 단계를 수행하면 테이블 이름 복수화 문제를 해결할 수 있습니다. 불일치 문제를 해결하고 보기에서 "투표" 테이블에 성공적으로 액세스했습니다.

위 내용은 내 모델에 단일 이름이 필요한 경우 Entity Framework가 MySQL의 테이블 이름을 복수형으로 만드는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿