간단한 Linq 선택 작동하지 않음

asp.net-core c# entity-framework-core entity-framework-plus linq

문제

정수 목록을 선택하려고하는데 예외가 발생합니다.

예외 메시지 : System.ArgumentException : 'System.Collections.Generic.IAsyncEnumerable1 [System.Int32]'식은 'System.Collections.Generic.IAsyncEnumerable1 [System.Object]'형식의 매개 변수에 사용할 수 없습니다. Collections.Generic.IAsyncEnumerable1 [MyProject.Model.Entities.MyTable] CastModel '매개 변수 이름 : arg0

재현 단계

모델

public class MyTable { 
  public int MyTableId { get; set; } 
  public int SomeKey { get; set; } 
  public int MyFieldIntegerIWant { get; set; } 
} 

아래의 쿼리를 실행하십시오 (또는 비슷한 쿼리).

public class MyTable { 
  public int MyTableId { get; set; } 
  public int SomeKey { get; set; } 
  public int MyFieldIntegerIWant { get; set; } 
} 

추가 기술 세부 사항

EF 코어 버전 : 1.1.0

데이터베이스 공급자 : Microsoft.EntityFrameworkCore.SqlServer

운영 체제 : Windows 7

IDE : Visual Studio 2015

최신 정보:

The issue had something to do with EF Plus' QueryFilters https://github.com/zzzprojects/EntityFramework-Plus/issues/133과 관련이 있습니다.

전문가 답변

@thejason과 논의한 후,

이 문제는 Entity Framework Plus가 아니라 EF Core에서 캐스팅을 처리하는 방식으로 발생했습니다.

이 문제는 다음 코드를 사용하여 쉽게 재현 할 수 있습니다.

using (var ctx = new CurrentContext())
{
    int keyId = 1;

    var ids = ctx.MyTables
        .Cast<IMyTable>()
        .Cast<MyTable>()
        .Where(x => x.SomeKey.Equals(keyId))
        .Select(x => x.MyFieldIntegerIWant)
        .ToList();
}

캐스트 방법은 EF Core 2.x에서 수정 될 예정입니다.




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