Подтвердить что ты не робот

Последовательность не содержит соответствующего элемента - EntityFramework

Я использую EF 6.1.0 и создаю службу WCF.

Сначала я создал библиотеку классов, содержащую мои сущности, Mappers и Context для инициализации EF. Я также создал класс, содержащий экземпляр контекста и имеющий этот код:

public IQueryable<[Entity]> GetAll()
{
    return context.[Entity].AsQueryable();
}

С другой стороны, я создал службу WCF в одном проекте и вызывает функцию GetAll() в файле .svc следующим образом:

public List<[Entity]> GetList()
{
    [iObject] repository = new [Object](new Context());
    return repository.GetAll().ToList();
}

Проект строится. Я даже проверяю cconfiguration, и он находится в правой БД. Однако базы данных и таблиц, которые предположительно созданы, не существует, и появляется сообщение об ошибке "Последовательность не содержит соответствующий элемент".

Если это сбивает с толку, вы можете указать мне ссылку WCF-сервисов с использованием Code First Entity Framework.

4b9b3361

Ответ 1

У меня была ошибка, где я получил System.InvalidOperationException с сообщением Sequence contains no matching element, потому что у меня было неправильное строковое значение, переданное в .HasColumnType() в моей конфигурации таблицы.

Ответ 2

Я просто испытал ту же проблему. Сначала код из мастера базы данных сгенерировал один из столбцов как [Column(TypeName = "date")].

Вызов .saveChanges() привел к Sequence contains no elements.

После изменения определенного столбца на [DataType(DataType.DateTime)] он работал как ожидалось.

Ответ 3

Я также получал такую ​​же ошибку при добавлении миграции или обновлении базы данных.

Причина в том, что я использовал неправильный тип столбца

[Column("ImageType", TypeName = "varchar(20)")]
public string ImageType
{
     get;
     set;
}

Но когда я удалил 20 из varchar, он начал работать для меня

[Column("ImageType", TypeName = "varchar")]
public string ImageType
{
    get;
    set;
}

Ответ 4

Для меня это сообщение было из-за недопонимания для TypeName в атрибуте Column.

Column Attribute: [Column (string name, Properties:[Order = int],[TypeName = string])

name: имя столбца в таблице базы данных.
Порядок: порядок столбца, начиная с нулевого индекса. (Необязательно)
TypeName: тип данных столбца. (Необязательно)

Это TypeName должно быть только именем типа и не должно включать точность или масштаб или длину и любые другие вещи. Например, следующее приведет к ошибке

[Column(TypeName = "nvarchar(600)")]

в то время как ниже один будет работать нормально, однако вы можете захотеть иметь конкретный размер столбца, и для этого одним из способов является использование свободного API

[Column(TypeName = "nvarchar")]

Ответ 5

Entity Framework генерирует это исключение, если тип столбца недопустим. Например:

// This will throw an error. There is no such type name.
[Column(TypeName = "Invalid")]
public string Column1 { get; set; }

// Works.
[Column(TypeName = "varchar")]
public string Column1 { get; set; }

См. следующие примеры:

Ответ 6

Угу. Поймал меня так же, потому что в момент отвлечения я поставил буквально длинный там для колонки bigint т.е. HasColumnType("long") - вы можете в это поверить?! Какой клоун!

Генераторы обычно правильно создают ваши классы EF, но если вы не можете или не хотите их использовать, вы можете использовать статический класс с некоторыми статическими полями на них, чтобы вы могли intellisense его довольно хорошо:

public static class DatabaseColumnTypes
{
    /// <summary>
    /// Use this for 'boolean' values.
    /// </summary>
    public static string BitColumn = "bit";

    /// <summary>
    /// Use this for 'byte' values.
    /// </summary>
    public static string TinyIntColumn = "tinyint";

    /// <summary>
    /// Use this for 'long' values.
    /// </summary>
    public static string BigIntColumn = "bigint";

    /// <summary>
    /// Use this for 'string' values.
    /// </summary>
    public static string VarcharColumn = "varchar";

    // etc
}

Теперь вы можете сделать HasColumnType( DatabaseColumnTypes.BigIntColumn )

Я знаю, я знаю, это лениво, я должен помнить эти типы, но каждый раз так часто я нахожусь в Stack Overflow, и это просто экономит время...

Ответ 7

У меня получилось такое же сообщение об ошибке, когда я переименовал мою модель Member в Student, и у меня было свойство навигации в каком-то другом классе:

public IList<Student> Members { get; set; }

Я изменил это на:

public IList<Student> Students { get; set; }

и проблема решена!

Ответ 8

Я получил эту ошибку при определении наследования таблиц по типам с помощью Fluent API (как класса, производного от EntityTypeConfiguration<T>) и ошибочно переопределенного поля, которое уже было определено в конфигурации базового класса (и оба были в точности одинаковыми). Я использовал пакет nuget EntityFramework 6.2.0.

Ответ 9

Я был пойман с этим, потому что я ссылался на свойство reference вместо свойства Id.

        var t = modelBuilder.Entity<CyDocument>();
        t.HasIndex(b => b.DocTypeId);

Ответ 10

Для меня это помогло при переключении класса проекта на Установить как проект запуска