Усилие (C#) - "Последовательность не содержит соответствующего элемента" при отправке данных в любой из моих объектов
Я пытаюсь создать несколько модульных тестов для нескольких вызовов веб-сервисов в моем проекте. Я использую Entity Framework 6.1.3 в своем проекте для извлечения данных на сервисном уровне (с подходом, основанным на коде). Я провел некоторое исследование о том, как макетировать объект DatabaseContext, и обнаружил, что Effort может это сделать.
Я следовал документации при реализации Effort в моих модульных тестах, но когда я пытаюсь заполнить данные для своих сущностей, я получаю исключение "System.InvalidOperationException:" Sequence not has element element "". Я не совсем уверен, почему это происходит. Любая помощь будет высоко ценится. Спасибо!
Вот как выглядит код....
//THE CALLER -- Doing what Effort suggests to do.
var dbConnection = DbConnectionFactory.CreateTransient();
FakeDbContext = new FakeDbContext(dbConnection);
DatabaseSeed.AddTestData(FakeDbContext);
Здесь я собираю данные для объектов...
public static void AddTestData(IFakeDbContext context)
{
//**************** IT CRASHES HERE *********************
context.FakeEntity1.AddOrUpdate(new FakeEntity1
{
Name1 = "TestingName1",
LastName1 = "TestingLastName1"
});
context.SaveChanges();
}
Вот моя модель сущности...
[Table("rpt.FakeEntity1")]
public partial class FakeEntity1 : IFakeEntity1
{
[Key]
[Column(Order = 0)]
[StringLength(20)]
public string Name1 { get; set; }
[Key]
[Column(Order = 1)]
[StringLength(20)]
public string LastName1 { get; set; }
}
Вот мой DatabaseContext...
public partial class FakeDbContext: IFakeDbContext
{
public FakeDbContext(DbConnection dbConnection)
: base(dbConnection, true)
{
//Effort requires this.
}
}
public interface IFakeDbContext :IDisposable
{
DbSet<FakeEntity1> FakeEntity1 {get; set;}
}
У меня также есть другой класс FakeDbContext.Base, который переопределяет OnModelCreating.
Вот трассировка стека:
2 ответа
Трассировка стека показывает, что исключение выдается, когда поставщик данных ищет "тип хранилища из имени". Это указывает на то, что вы используете тип данных, который Effort не поддерживает. Это подтверждается проблемой в проекте Effort.
Надеюсь это поможет.
Многие ответы говорят, что вы должны добавить FirstorDefault()
в ваших утверждениях EF, но эта ошибка также возникает в неправильных свойствах с использованием аннотаций данных.
При использовании аннотаций данных будьте осторожны со свойствами, которые вы добавляете.
Пример ниже, я пропустил TypeName = "string"
, который должен был быть nvarchar
так как это тип данных в базе данных.
Кроме того, принять к сведению Order = n
,(начинается с 0)
Обнаружено это при обновлении исходного кода прошлых коллег.
[Display(Name = "Name")]
[MaxLength(4000)]
[Column("Name", Order = 14, TypeName = "string")]
public string Name { get; set; }
Затем я исправил свой код с
[Display(Name = "Name")]
[MaxLength(4000)]
[Column("Name", Order = 15, TypeName = "nvarchar")]
public string Name { get; set; }
:)