He estudiado detenidamente StackOverflow, Google y asp.net tratando de encontrar un ejemplo claro y claro de cómo hacer esto. Todos los ejemplos han sido complicaciones abstractas o complicadas que no se aplican. No he podido extraer mucho de ellos. Hasta el momento, ninguno de ellos ha respondido completamente a mi pregunta o abordado mi (s) problema (s).¿Cómo actualizar/crear muchos datos relacionales en MVC Code-first usando EF?
estoy trabajando en un proyecto de MVC con el siguiente modelo:
Article.cs:
public class Article
{
public int ArticleId { get; set; }
public string Title { get; set; }
.
.
.
public virtual ICollection<Category> Categories { get; set; }
public Article()
{
Categories = new HashSet<Category>();
}
}
Category.cs:
public class Category
{
public int CategoryId { get; set; }
public string Name { get; set; }
public virtual ICollection<Article> Articles { get; set; }
public Category()
{
Articles = new HashSet<Article>();
}
}
ArticleEntities.cs:
public class ArticleEntities : DbContext
{
public DbSet<Article> Articles { get; set; }
public DbSet<Category> Categories { get; set; }
}
Un arte icle puede tener muchas categorías y una categoría puede pertenecer a muchos artículos.
Hasta ahora puedo guardar/actualizar/crear todos los campos del artículo excepto las Categorías.
Los estoy representando como casillas de verificación en la vista. Puedo obtener los valores para las casillas de verificación seleccionadas en el controlador, pero todos los intentos que hice para almacenarlos en el DB con el artículo han fallado.
¿Cómo puedo:
1) Al guardar un artículo editado, actualizar las relaciones existentes en la tabla de relación sin crear duplicados?
2) Al guardar un nuevo artículo, cree las relaciones elegidas en la tabla de relaciones?
"Asumo que se obtiene una lista de CategoryIDs de la controlador post acción, una lista o más general solo un IEnumerable . " –
panzerblitzer
Sí, soy categoryIds en una colección (Iumerable, en realidad). Todo parece que debería funcionar, pero una línea de código no se compilará: "if (! CategoryIds.Cualquiera (c => c.CategoryId == categoryInDb.CategoryId)) "Recibo un error que'int 'no contiene una definición para CategoryId.- –
panzerblitzer
@panzerblitzer: Sí, eso fue un error, lo siento. corrigió el código (usando 'Contains', ver arriba).' if (! categoryIds.Any (c => c == categoryInDb.CategoryId)) 'funcionaría igual. – Slauma