Усилия (C #) - «Последовательность не содержит соответствующего элемента» при посеве данных для любого из моих объектов

c# effort entity-framework unit-testing

Вопрос

Я пытаюсь построить некоторые модульные тесты для нескольких вызовов веб-сервисов в моем проекте. Я использую 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; }

:)



Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему