He estado usando la base de datos En primer lugar, EF 4.1El tipo de entidad List`1 no es parte del modelo para el contexto actual
que estoy recibiendo "El tipo de entidad List`1 no es parte del modelo de el contexto actual ". error al tratar de actualizar un registro desde mi vista de edición.
El error se produce en
db.Entry(properties).State = EntityState.Modified;
Aquí es mi modelo:
public class Users
{
[Key]
public int User_ID { get; set; }
public string UserName { get; set; }
[NotMapped]
public IEnumerable<App_Properties> User_Properties
{
get { return Properties.Where(u => u.User_ID == User_ID); }
}
public virtual ICollection<App_Properties> Properties { get; set; }
}
public class App_Properties
{
[Key]
public int Prop_ID { get; set; }
public int User_ID { get; set; }
public int App_ID { get; set; }
public string Key { get; set; }
public string Value { get; set; }
public DateTime DateEntered { get; set; }
public DateTime DateModified { get; set; }
[ForeignKey("User_ID")]
public virtual Users Users { get; set; }
}
Aquí está mi controlador:
[HttpPost]
public ActionResult Edit(ICollection<App_Properties> properties)
{
if (ModelState.IsValid)
{
foreach (var item in properties)
{
db.Entry(properties).State = EntityState.Modified;
}
db.SaveChanges();
return RedirectToAction("Index");
}
return View(properties);
}
Sospecho que el bucle foreach no es apropiado en el establecimiento EntityState para cada elemento en una colección.
Cualquier ayuda sería muy apreciada.
Una nota rápida semántica, los App_Properties.Users nombre indica usuarios múltiples, no uno La convención tiende a ser que un solo objeto tiene un nombre singular que dice 'var users = new Users()' implica una colección de personas, no un solo elemento. – Leniency
Sí, gracias ... No tengo control de la base de datos y dejo que la nomenclatura incorrecta de las tablas se propague a mi código. –
No obstante, los nombres db no tienen por qué serlo: es muy fácil cambiar la asignación de su POCO a la tabla de base de datos real OnModelCreating: 'modelBuilder.Entity() .ToTable (" Users ")'. Una simple redenominación F2 en la clase Users propagará el rename en su proyecto. Lo mismo con los nombres de las propiedades: puede asignar un mapa personalizado. http://weblogs.asp.net/scottgu/archive/2010/07/23/entity-framework-4-code-first-custom-database-schema-mapping.aspx –
Leniency