relacion muchos framework first existing code c# linq entity-framework many-to-many

c# - first - relacion muchos a muchos entity framework



Consulte una relaciĆ³n de muchos a muchos con linq/Entity Framework. CodeFirst (5)

¿Cómo puedo consultar una relación de muchos a muchos utilizando primero el código de Entity Framework y linq? El problema es que EF crea automáticamente la tabla de relaciones. Por lo tanto, no lo tengo en mi contexto.

Este es el modelo relacional:

Necesito una lista de artículos para un ID de categoría específico, básicamente replicar algo así:

select a.Id, a.Title,a.ShortDescription from Articles a join CategoryArticles ca on ca.Article_Id=a.Id where ca.Category_Id = @parameter

Sin embargo mi dbcontext solo tiene:

public DbSet<Article> Articles { get; set; } public DbSet<Category> Categories { get; set; }.

Gracias por cualquier ayuda.


Ejemplo de sintaxis del método linq

int category_ID = 1; var query = db.Articles .Where(a => a.Categories .Any(c => c.Category_ID == category_ID)) .ToList();


Puedes hacerlo:

var cat_id=1; // Change this variable for your real cat_id var query= from article in db.Articles where article.Categories.Any(c=>c.Category_ID==cat_id) select article;

De esta manera obtendrá los artículos que satisfagan las condiciones que desea. Este es el código sql generado por esa consulta:

SELECT [Extent1].[Id] AS [Id], [Extent1].[Title] AS [Title] FROM [dbo].[Articles] AS [Extent1] WHERE EXISTS (SELECT 1 AS [C1] FROM [dbo].[ArticleCategories] AS [Extent2] WHERE ([Extent1].[Id] = [Extent2].[Article_Id]) AND ([Extent2].[Category_Id] = @p__linq__0))


Qué tal si

db.Categories.Where(c => c.Id == categoryId).SelectMany(c => c.Articles)?

Esto debería funcionar bien (produzca la declaración SQL unida a la derecha).


Si solo desea que la tabla completa incluya todas las relaciones, tal vez intente algo como esto:

List<CategoryArticle> rec = context.Category.SelectMany(a => a.Articles.Select(c => new CategoryArticle { Category_Id = c.Id, Article_Id = a.Id })).ToList();


Simplemente me encontré con esto y pensé que publicaría la solución que encontré para cualquiera que se encontrara con esta página. Esto produce una INNER JOIN .

var category_id = 24; var query = (from article in Articles from category in article.Categories.Where(x => x.Category_ID == category_id) select article);