Entity Framework 6에서 노력을 사용하는 올바른 방법은 무엇입니까?

c# effort entity-framework entity-framework-6 linq

문제

Entity Framework 6을 사용하여 노력 데이터 공급자를 사용하여 일부 테스트 코드를 작성하려고합니다. 가장 단순한 유스 케이스가되어야하는 것처럼 보이지만 실제로는 얻을 수 없습니다. 작업.

다음은 내 DbContext 클래스입니다.

public class CcdReductionFrameCatalogue : DbContext
    {
    public CcdReductionFrameCatalogue()
        : this("name=CcdReductionFrameCatalogue") {}

    public CcdReductionFrameCatalogue(string connectionString) : base(connectionString) {}

    public CcdReductionFrameCatalogue(DbConnection connection) : base(connection, true) {}

    public virtual DbSet<CcdFrame> CcdFrames { get; set; }
    }

POCO 엔티티는 다음과 같이 정의됩니다.

public class CcdReductionFrameCatalogue : DbContext
    {
    public CcdReductionFrameCatalogue()
        : this("name=CcdReductionFrameCatalogue") {}

    public CcdReductionFrameCatalogue(string connectionString) : base(connectionString) {}

    public CcdReductionFrameCatalogue(DbConnection connection) : base(connection, true) {}

    public virtual DbSet<CcdFrame> CcdFrames { get; set; }
    }

[FitsKeyword] 특성은 정의한 사용자 지정 특성이며 Entity Framework와 관련이 없어야합니다.

유닛 테스트에서 Effort 빠른 시작 가이드에 나와있는 것처럼 데이터 연결을 설정했습니다.

public class CcdReductionFrameCatalogue : DbContext
    {
    public CcdReductionFrameCatalogue()
        : this("name=CcdReductionFrameCatalogue") {}

    public CcdReductionFrameCatalogue(string connectionString) : base(connectionString) {}

    public CcdReductionFrameCatalogue(DbConnection connection) : base(connection, true) {}

    public virtual DbSet<CcdFrame> CcdFrames { get; set; }
    }

최대한 빨리 DbSet에 대한 LINQ를 사용하면 바보 같은 의미없는 오류 메시지가 나타납니다. 예를 들어, 저장소를이 간단한 코드에 전달하면 다음과 같습니다.

public class CcdReductionFrameCatalogue : DbContext
    {
    public CcdReductionFrameCatalogue()
        : this("name=CcdReductionFrameCatalogue") {}

    public CcdReductionFrameCatalogue(string connectionString) : base(connectionString) {}

    public CcdReductionFrameCatalogue(DbConnection connection) : base(connection, true) {}

    public virtual DbSet<CcdFrame> CcdFrames { get; set; }
    }

이 코드를 실행하면 다음과 같은 결과를 얻습니다.

public class CcdReductionFrameCatalogue : DbContext
    {
    public CcdReductionFrameCatalogue()
        : this("name=CcdReductionFrameCatalogue") {}

    public CcdReductionFrameCatalogue(string connectionString) : base(connectionString) {}

    public CcdReductionFrameCatalogue(DbConnection connection) : base(connection, true) {}

    public virtual DbSet<CcdFrame> CcdFrames { get; set; }
    }

이제 이것은 무감각하게 간단한 LINQ 코드입니다. 여기서 무엇을 놓치고 있습니까?

수락 된 답변

LINQ 쿼리의 사용자 지정 개체는 비교할 수 없습니다. 기본 유형 (int, string 등) 만 비교해야합니다.

var existingFrames = from frame in repository.CcdFrames
                     where frame.Id == newFrame.Id
                     select frame;

여기서 몇 가지 정보를 얻을 수 있습니다. 이 컨텍스트에서는 기본 유형 또는 열거 유형 만 지원됩니다.




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