Усилия (EF Unit Testing), дающие ошибки

c# effort entity-framework unit-testing

Вопрос

Я пытаюсь выполнить модульное тестирование на некоторых классах, которые отвечают на Контекст БД Entity Framework. Для справки мне удалось найти библиотеку под названием Effort, которая кажется немного старой и не очень хорошо документирована, но, похоже, она работает, и, похоже, она довольно популярна.

Я пытаюсь использовать загрузчик данных CSV.

При выполнении ToArray() я получаю исключения, ToArray() что Sequence contains no matching element .

Любые идеи о том, что я могу делать неправильно? Или, если бы не другая библиотека, я мог бы дать шанс?

Несколько фрагментов:

[Table("SEC_USER")]
public class SecUser {
    [Key][Column("USERID")]
    public int UserId { get; set; }

    [Column("USERNAME")]
    public string UserName { get; set; }
}

Контекст БД:

[Table("SEC_USER")]
public class SecUser {
    [Key][Column("USERID")]
    public int UserId { get; set; }

    [Column("USERNAME")]
    public string UserName { get; set; }
}

SEC_USER.csv:

[Table("SEC_USER")]
public class SecUser {
    [Key][Column("USERID")]
    public int UserId { get; set; }

    [Column("USERNAME")]
    public string UserName { get; set; }
}

Тест:

[Table("SEC_USER")]
public class SecUser {
    [Key][Column("USERID")]
    public int UserId { get; set; }

    [Column("USERNAME")]
    public string UserName { get; set; }
}

System.InvalidOperationException:

[Table("SEC_USER")]
public class SecUser {
    [Key][Column("USERID")]
    public int UserId { get; set; }

    [Column("USERNAME")]
    public string UserName { get; set; }
}

Популярные ответы

У меня была эта проблема, и я обнаружил, что проблема заключалась в том, что я использовал аннотацию данных ColumnType . Даже когда я перешел на использование соглашения о HasColumnType модели HasColumnType , я все равно получил ту же ошибку. Я предполагаю, что у одной из ваших сущностей есть аннотация (или конвенция) данных?

Если это так, самым простым решением было бы удалить аннотацию данных. Если это невозможно, я создал виртуальное свойство (например, public virtual bool IsInMemoryContext { get; } = false; ) в DbContext, который я public override bool IsInMemoryContext { get; } = true; в своих тестах - public override bool IsInMemoryContext { get; } = true; , и в методе OnModelCreating я проверил, было ли это свойство задано, перед добавлением типов столбцов.

if (!IsInMemoryContext)
{
    modelBuilder.Entity<AuditLog>()
        .Property(e => e.EventType)
        .HasColumnType("char");
}

Более подробную информацию об ошибке можно найти здесь: GitHub issue with Effort




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