Estoy entrando en el Entity Framework, pero no estoy seguro de si me falta un punto crítico en el enfoque de código primero.
Estoy usando un patrón de repositorio genérico basado en el código de https://genericunitofworkandrepositories.codeplex.com/ y he creado mis entidades.
Pero cuando intento acceder o modificar la entidad, me encuentro con lo siguiente:
System.InvalidOperationException: el tipo de entidad Estate no es parte del modelo para el contexto actual.
Ocurre cuando intento acceder desde mi repositorio:
public virtual void Insert(TEntity entity)
{
((IObjectState)entity).ObjectState = ObjectState.Added;
_dbSet.Attach(entity); // <-- The error occurs here
_context.SyncObjectState(entity);
}
La base de datos (./SQLEXPRESS) se crea muy bien, pero las entidades (tablas) simplemente no se crean al inicio.
Me pregunto si necesito establecer explícitamente la asignación de las entidades. ¿EF no puede hacerlo por sí solo?
Mi entidad es:
public class Estate : EntityBase
{
public int EstateId { get; set; }
public string Name { get; set; }
}
Mi contexto es así:
public partial class DimensionWebDbContext : DbContextBase // DbContextBase inherits DbContext
{
public DimensionWebDbContext() :
base("DimensionWebContext")
{
Database.SetInitializer<DimensionWebDbContext>(new CreateDatabaseIfNotExists<DimensionWebDbContext>());
Configuration.ProxyCreationEnabled = false;
}
public new IDbSet<T> Set<T>() where T : class
{
return base.Set<T>();
}
}
¿Hay alguna razón específica por la que se produce este error? He intentado habilitar las migraciones y habilitar las migraciones automáticas sin ninguna ayuda tampoco.
fuente
OnModelCreating
si sus entidades están en el mismo ensamblado que el suyoDbContext
. Sin embargo, nunca he usado anotaciones de datos para entidades, así que no puedo decir con certeza. Siempre puede escanear ensamblajes en suOnModelCreating
para encontrar entidades en otros ensamblajes y registrarlos automáticamente (que es lo que hace Tripod).Aparentemente, este error es muy genérico, podría tener varias razones. En mi caso, fue lo siguiente: La cadena de conexión (en Web.config) generada por el
.edmx
no era válida. Después de casi un día de intentarlo todo, cambié la cadena de conexión de la cadena EF a una cadena ADO.NET. Esto resolvió mi problema.Por ejemplo, la cadena EF se ve así:
Y la cadena ADO.NET se ve así:
Fuente: http://msdn.microsoft.com/nl-nl/data/jj556606.aspx
fuente
EF 4.x
aEF 6
. Tuve que regenerar la cadena de conexión para agregar una tabla (DatabaseFirst
). No me di cuenta de que mis conexiones en elapp.config
y elweb.config
eran diferentes. Una vez que me hice cargoconnectionstring
delapp.config
, comenzó a funcionar.Para mí, el problema era que no había incluido la clase de entidad dentro de mi conjunto de bases de datos dentro del contexto del marco de la entidad.
fuente
Puede intentar eliminar la tabla del modelo y agregarla nuevamente. Puede hacerlo visualmente abriendo el archivo .edmx desde el Explorador de soluciones.
Pasos:
fuente
El problema puede estar en la cadena de conexión. Asegúrese de que su cadena de conexión sea para el proveedor SqlClient, sin elementos de metadatos relacionados con EntityFramework.
fuente
He visto este error cuando una tabla existente en la base de datos no se asigna adecuadamente a un primer modelo de código. Específicamente tuve un char (1) en la tabla de la base de datos y un char en C #. Cambiar el modelo a una cadena resolvió el problema.
fuente
Mi problema se resolvió actualizando la parte de metadatos de la cadena de conexión. Aparentemente apuntaba a la referencia incorrecta .csdl / .ssdl / .msl.
fuente
Otra cosa para verificar con su cadena de conexión: el nombre del modelo. Estaba usando dos modelos de entidad, DB primero. En la configuración, copié la conexión de la entidad para una, la renombré y cambié la parte de la cadena de conexión. Lo que no cambié fue el nombre del modelo, por lo tanto, si bien el modelo de entidad se generó correctamente, cuando se inició el contexto, EF estaba buscando en el modelo incorrecto las entidades.
Parece obvio escrito, pero hay cuatro horas que no volveré.
fuente
Para mí, el problema fue que usé el
connection string
generado porADO.Net
Model (.edmx). Cambiar la cadena de conexión resolvió mi problema.fuente
Esto también puede ocurrir si está utilizando un caché de modelo persistente que está desactualizado por una razón u otra. Si su contexto se ha almacenado en caché en un archivo EDMX en un sistema de archivos (a través de DbConfiguration.SetModelStore), nunca se llamará a OnModelCreating ya que se usará la versión en caché. Como resultado, si falta una entidad en su tienda en caché, obtendrá el error anterior a pesar de que la cadena de conexión es correcta, la tabla existe en la base de datos y la entidad está configurada correctamente en su DbContext.
fuente
El mensaje era bastante claro pero al principio no lo entendí ...
Estoy trabajando con dos contextos de Entity Framework DB
sysContext
yshardContext
en el mismo método.La entidad que había modificado \ actualizado es de un contexto, pero luego intenté guardarlo en el otro contexto de esta manera:
pero la versión correcta debería ser esta:
Después de pasar la entidad al contexto correcto, este error desapareció.
fuente
Suena obvio, pero asegúrese de no ignorar explícitamente el tipo:
modelBuilder.Ignore<MyType>();
fuente
El mapa de la entidad (incluso uno vacío) agregado a la configuración conducirá a que el tipo de entidad sea parte del contexto. Teníamos una entidad sin relación con otras entidades que se solucionó con un mapa vacío.
fuente
si está probando DB primero, asegúrese de que su tabla tenga clave primaria
fuente
Visual Studio 2019 parece causarme esto. Lo arreglé generando el modelo edmx nuevamente en 2017.
fuente
Tengo el mismo problema en Entity Framewrok y lo resolví siguiendo estos pasos:
1-Abra su Model.edmx 2-cambie un lugar de la tabla (para hacer cambios en el archivo cs) 3-guárdelo
Espero ayudarte
fuente
Elimine el archivo .edmx y agréguelo nuevamente. Especialmente, si ha actualizado el Entity Framework.
fuente
Estaba enfrentando el mismo problema con EntityFrameworkCore tratando de actualizar un rango de valores.
Este enfoque no funcionó
Después de agregar el método UpdateRange y eliminar adjuntar y entrar todo funciona
fuente
Para mí fue causado porque cambié el nombre de la clase de entidad. Cuando lo revertí, estaba bien.
fuente
Podría ser estúpido, pero si solo obtuvo este error en alguna Tabla, no olvide limpiar su proyecto y reconstruirlo (podría ahorrarle mucho tiempo)
fuente
Tuve esto
Esto estaba en un método asíncrono, pero me olvidé de esperar antes de GetEntryAsync, y obtuve el mismo error ...
fuente