c# - todos - Relaciones de primera clase del código del marco de la entidad
manejo de ventanas en c# (2)
Estoy intentando crear mi modelo en Entity Framework y estoy tratando de resolverlo usando la primera opción del código.
Actualmente tengo 3 tablas en mi base de datos. Mi tabla de estado tiene todos los estados usados en la aplicación web. Tengo una mesa de noticias. Y tengo una tabla de estado de noticias. La razón por la que lo hice así es porque no quiero que todos los estados estén disponibles para las noticias, solo un par de ellas. Entonces mis 3 tablas se verán así:
Tabla de Noticias:
NewsId int required primary key
Title varchar required
Body varchar required
NewsStatusId int required foreign key
NewStatus Table:
NewsStatusId int required primary key
StatusId int required foreign key
Tabla de estado
StatusId int required primary key
Name varchar required
Al crear las clases para esto, ¿necesito crear clases para News, Status y NewsStatus? Estaba pensando solo en Noticias y Estado? ¿Cómo serían mis relaciones entre las 2/3 clases?
Mi clase de Noticias se ve así
public class News
{
public int NewsId { get; set; }
// rest of my properties
public int StatusId { get; set; }
}
Clase de estado:
public class Status
{
public int StatusId { get; set; }
public string Name { get; set; }
}
¿Cómo se verían estas clases con las relaciones entre las 2/3 clases?
Cualquier código de muestras sería apreciado.
Realmente no necesita una API fluida para una asociación básica de Muchos a Muchos entre Noticias y Estado. Todo será inferido por Code First base on conventions. Dicho esto, podemos personalizar su esquema de base de datos con una API fluida en función de sus requisitos.
public class News
{
public int NewsId { get; set; }
public string Title { get; set; }
public ICollection<Status> Statuses { get; set; }
}
public class Status
{
public int StatusId { get; set; }
public string Name { get; set; }
public ICollection<News> Newses { get; set; }
}
public class Ctp5Context : DbContext
{
public DbSet<News> Newses { get; set; }
public DbSet<Status> Statuses { get; set; }
}
Tenga en cuenta que en una asociación Muchos a muchos como esta, no habrá un NewsStatusId
como clave externa en la clase Noticias, sino que se mostrará una clave externa NewsId en la tabla de enlaces que hace referencia a la tabla PK en Noticias. Si realmente necesita tener un NewsStatusId
en la clase News, entonces tenemos que romper esta asociación a la asociación de uno a varios, lo que significa que terminaremos teniendo 3 entidades y no 2.
Solo News
y Status
. Escribirías algo como:
modelBuilder.Entity<News>()
.HasMany(n => n.Statuses)
.WithMany(s => s.News);
(Ajuste las pluralizaciones a su gusto).