Последовательность не содержит соответствующего параметра элемента HasColumnType (varchar) в сопоставлениях EF с использованием усилий

У меня есть следующее сопоставление Entity Framework (v6.1.3):

public class FileStoreDocumentEntityMapping : EntityTypeConfiguration<FileStoreDocumentEntity>
{
    public FileStoreDocumentEntityMapping()
    {
        Property(x => x.FileStoreDownloadUrl)
            .HasColumnName("FileStoreDetailsUrl")
            .HasColumnType("varchar")
            .HasMaxLength(1000);
        Property(x => x.FileStoreVersion)
            .HasColumnName("FileStoreVersion")
            .HasColumnType("varchar")
            .HasMaxLength(100);
    }
}

Оба столбца имеют тип данных = "varchar" в моей базе данных и правильные размеры: введите здесь описание изображения

Однако некоторые из моих модульных тестов не работают с этой ошибкой:

"System.InvalidOperationException: последовательность не содержит совпадающих элементов"

Я прочитал в сообщении по теме, что вы можете получить указанную выше ошибку, если пройдете недопустимый тип для метода HasColumnType, но в моем случае "varchar" должен быть допустимым.

Есть идеи, что может быть не так?

Вот как эти свойства определены в моем объекте:

    public virtual string FileStoreVersion
    {
        get;
        set;
    }

    public virtual string FileStoreDetailsUrl
    {
        get;
        set;
    }

Вот пример одного теста, который не проходит в первой строке:

    [TestMethod]
    public void Delete_ReturnsSuccess()
    {
        _context.DistributionListSelectionCriteriaDepartmentEntities.Add(_distributionListSelectionCriteriaDepartmentEntity);

_context в данном случае имеет тип MemoryEnterprisePaycorCodeFirstContext:

    private void InitializeTestObjects()
    {
        _context = new MemoryEnterprisePaycorCodeFirstContext();

Который наследуется от моего public class EnterprisePaycorCodeFirstContext : DbContext

В этом классе я инициализирую сопоставления сущностей:

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Configurations.Add(new FileStoreDocumentEntityMapping());

Может ли это быть связано с тем, что я использую Effort MemoryContext, а не реальный контекст БД?

public class MemoryEnterprisePaycorCodeFirstContext : EnterprisePaycorCodeFirstContext
{
    public MemoryEnterprisePaycorCodeFirstContext()
        : base(DbConnectionFactory.CreateTransient())
    {
        Database.CreateIfNotExists();
    }

person Adolfo Perez    schedule 02.11.2018    source источник
comment
Привет, можно ли поделиться кодом, который выдает ошибку из вашего модульного теста?   -  person philreed    schedule 02.11.2018
comment
@philreed Я только что добавил эти детали. Спасибо   -  person Adolfo Perez    schedule 02.11.2018
comment
Спасибо. В какой строке вы видите ошибку System.InvalidOperationException: Sequence contains no matching element?   -  person philreed    schedule 02.11.2018
comment
Первая строка тестового метода, которую я добавил в свой пост, добавила элемент в DistributionListSelectionCriteriaDepartmentEntities   -  person Adolfo Perez    schedule 02.11.2018


Ответы (1)


Я понял, что это было. Оказывается, я использовал библиотеку Effort, которая не поддерживает некоторые типы столбцов, как указано @Balah. Я использовал его метод, чтобы обойти конфигурацию сопоставления сущностей при переходе из контекста памяти: Модульное тестирование) с ошибками

person Adolfo Perez    schedule 02.11.2018