Я пытаюсь построить некоторые модульные тесты для нескольких вызовов веб-сервисов в моем проекте. Я использую Entity Framework 6.1.3 в своем проекте для извлечения данных на уровне службы (с использованием подхода, основанного на кодах). Я провел некоторое исследование о том, как скомпоновать объект DatabaseContext, и я узнал, что Effort может это сделать.
Я следил за документацией при реализации Effort в своих модульных тестах, но когда я пытаюсь занести данные в мои объекты, я получаю исключение «System.InvalidOperationException:« Sequence не содержит исключение соответствующего элемента ». Я не совсем понимаю, почему это происходит. Любая помощь будет высоко ценится. Благодаря!
Вот как выглядит код.
//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.
Вот трассировка стека:
Трассировка стека показывает, что исключение генерируется, когда поставщик данных ищет «тип хранилища от имени». Это означает, что вы используете тип данных, который 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; }
:)