c# - studio - La secuencia no contiene ningún elemento coincidente-EntityFramework
la secuencia no contiene elementos visual studio (9)
Acabo de experimentar el mismo problema. El asistente de First Code from database generó una de las columnas como [Column(TypeName = "date")]
.
Llamar a .saveChanges()
resultó en que la Sequence contains no elements
.
Después de cambiar la columna definida a [DataType(DataType.DateTime)]
funcionó como se esperaba.
Estoy usando EF 6.1.0 y estaba creando un Servicio WCF.
Primero creé una biblioteca de clases que contiene mis entidades, mapeadores y contexto para inicializar EF. También creé una clase que contiene una instanciación del contexto y tengo este código:
public IQueryable<[Entity]> GetAll()
{
return context.[Entity].AsQueryable();
}
Por otro lado, he creado un servicio WCF en el mismo proyecto y llamo a la función GetAll () en el archivo .svc de esta manera:
public List<[Entity]> GetList()
{
[iObject] repository = new [Object](new Context());
return repository.GetAll().ToList();
}
El proyecto está construyendo. Incluso compruebo la configuración de cconfiguración y está en la base de datos correcta. Sin embargo, la base de datos y las tablas que supuestamente se crearon no existen y aparece un error "La secuencia no contiene ningún elemento coincidente" en la declaración.
Si este es confuso, ¿puede indicarme algún enlace de Servicios WCF utilizando Code First Entity Framework?
Entity Framework arroja esta excepción si el tipo de columna no es válido. Por ejemplo:
// 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; }
Vea estos ejemplos:
- Ejemplo 1
- Ejemplo 2
- Otros ejemplos en comentarios.
Obtuve el mismo mensaje de error cuando cambié el nombre de mi modelo de miembro a Estudiante y tenía una propiedad de navegación en alguna otra clase como:
public IList<Student> Members { get; set; }
Lo cambié a:
public IList<Student> Students { get; set; }
y el problema fue resuelto!
Obtuve este error al definir la herencia tabla por tipo con la API EntityTypeConfiguration<T>
(como una clase derivada de EntityTypeConfiguration<T>
) y el campo erróneamente redefinido que ya estaba definido en la configuración de la clase base (y ambos eran exactamente iguales). Estaba usando el paquete nuget EntityFramework 6.2.0.
Para mí, ayudó, cuando se cambió el proyecto de la clase a Establecer como proyecto de inicio
Para mí, este mensaje fue debido a malentendidos para TypeName en el atributo Column.
Atributo de columna: [Columna (nombre de cadena, Propiedades: [Order = int], [TypeName = string])
nombre: nombre de una columna en una tabla db.
Orden: orden de una columna, comenzando con índice cero. (Opcional)
TypeName: tipo de datos de una columna. (Opcional)
Este TypeName debe ser solo el nombre del tipo y no debe incluir precisión, escala o longitud ni ninguna otra cosa. Por ejemplo, lo siguiente causará un error
[Columna (TypeName = "nvarchar (600)")]
mientras que debajo de uno funcionará bien, sin embargo, es posible que desee tener un tamaño específico de la columna y para eso, una forma es usar una API fluida
[Columna (TypeName = "nvarchar")]
Sip. Me atrapó también porque en un momento de distracción puse el literal de largo para una columna de HasColumnType("long")
es decir, HasColumnType("long")
. ¿Puedes creerlo? ¡Qué payaso!
Los generadores generalmente crean sus clases de EF correctamente, pero si no puede o no quiere usar una, entonces podría usar una clase estática con algunos campos de cadenas estáticas para que pueda entenderlo bastante bien:
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
}
Ahora puede hacer HasColumnType( DatabaseColumnTypes.BigIntColumn )
Lo sé, lo sé, esto es flojo, debería recordar estos tipos, pero de vez en cuando me encuentro en buscándolo y esto solo ahorra tiempo ...
También estaba obteniendo el mismo error al agregar migración o actualizar la base de datos.
La razón era que estaba usando un tipo de columna incorrecto
[Column("ImageType", TypeName = "varchar(20)")]
public string ImageType
{
get;
set;
}
Pero cuando eliminé 20 de varchar, comenzó a funcionar para mí
[Column("ImageType", TypeName = "varchar")]
public string ImageType
{
get;
set;
}
Tuve un error donde obtuve una System.InvalidOperationException
con el mensaje Sequence contains no matching element
porque tenía un valor de cadena incorrecto que se pasa a .HasColumnType()
en la configuración de mi tabla.