Каков правильный способ использования усилий с Entity Framework 6?

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

Вопрос

Я пытаюсь получить некоторый тестовый код, работающий с использованием поставщика данных Effort с 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; }
    }

Как только я использую LINQ на DbSet, я получаю глупые бессмысленные сообщения об ошибках. Например, когда я передаю свой репозиторий в этот тривиальный код:

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
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему