Параметр «Последовательность не содержит совпадающих элементов» HasColumnType («varchar») в сопоставлениях EF с использованием Effort - PullRequest
0 голосов
/ 02 ноября 2018

У меня есть следующее сопоставление 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" в моей базе данных, и размеры указаны правильно enter image description here

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

" 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());

Может ли это быть, потому что я использую Усилие MemoryContext против контекста Real DB?

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

1 Ответ

0 голосов
/ 02 ноября 2018

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

...