Параметр "Последовательность не содержит совпадающих элементов" HasColumnType("varchar") в сопоставлениях EF с использованием Effort
У меня есть следующее сопоставление 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 против контекста Real DB?
public class MemoryEnterprisePaycorCodeFirstContext : EnterprisePaycorCodeFirstContext
{
public MemoryEnterprisePaycorCodeFirstContext()
: base(DbConnectionFactory.CreateTransient())
{
Database.CreateIfNotExists();
}
1 ответ
Я понял, что это было. Оказывается, я использовал Effort
библиотека, которая не поддерживает некоторые типы столбцов, как указано @Balah. Я использовал его технику, чтобы обойти конфигурацию отображения сущностей, когда исходил из моего контекста памяти: Effort (EF Unit Testing) выдавал ошибки