2011-01-27 19 views
7

Estoy intentando crear mi modelo en el marco de la entidad y estoy tratando de ir sobre el código primera opción es usar.entidad Código Marco relaciones de primer nivel

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. Así que mis 3 mesas se vería así:

Noticias Tabla:

NewsId int required primary key 
Title varchar required 
Body varchar required 
NewsStatusId int required foreign key 

nuevoCondición Tabla:

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 de este, lo hacen 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?

clase

Mis noticias parece que esta clase de estado

public class News 
{ 
    public int NewsId { get; set; } 
    // rest of my properties 
    public int StatusId { get; set; } 
} 

:

public class Status 
{ 
    public int StatusId { get; set; } 
    public string Name { get; set; } 
} 

¿Qué le estas clases parecerse a las relaciones entre las clases de 2/3?

Cualquier ejemplos de código sería apreciada.

Respuesta

6

Usted realmente no necesita ninguna API fluida para una asociación muchos-a-muchos básica 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 de muchos a muchos asociación de este tipo, no va a ser un NewsStatusId como una clave externa en la clase de noticias, en cambio, una clave externa NewSID será aparece en la tabla de enlace que hace referencia al PK en la tabla Noticias. Si realmente necesita tener un NewsStatusId en la clase Noticias, entonces tenemos que romper esta asociación a la asociación 2 uno-a-muchos, lo que significa que terminamos teniendo 3 entidades y no 2.

+0

Gracias. ¿Todavía necesito la tabla NewsStatus? No sé cómo se hace el enlace desde la tabla NewsStatus hasta las tablas de Estado y Noticias. ¿O estoy haciendo todo mal aquí? ¿Cómo se vería la estructura de la mesa? –

+1

Sí, que lo necesitan pero será creado y gestionado por EF automáticamente. Su modelo lógico no tiene una entidad como NewsStatus. La tabla de unión en una relación Muchos a Muchos contendrá * solo * claves externas de la relación que termina (es decirTablas de estado y noticias) o tiene que dividirlo en una asociación de 2 a uno, por lo tanto, presentando una nueva entidad como NewsStatus para contener las claves externas, así como cualquier otra propiedad requerida. El código que mostré en mi respuesta va de la primera manera. Avíseme si necesita hacerlo de la segunda manera y le mostraré cómo se hace. –

+0

En mi modelo de objetos, ¿cuál es la relación entre Noticias y Estado? 1 a M? ¿Tienes algún código sobre cómo implementarlo completamente? Todavía no he utilizado los primeros ensamblajes del código de EF, ¿hay algún tutorial decente? Incluso el siguiente ejemplo de código de Craig es nuevo para mí. –

1

Sólo News y Status. Usted escribiría algo así como:

modelBuilder.Entity<News>() 
    .HasMany(n => n.Statuses) 
    .WithMany(s => s.News); 

(Ajuste pluralizations a su gusto.)

+0

¿Qué es modelBuilder y dónde pondría? ¿eso? Ver mi publicación actualizada. Gracias. –

+0

Todavía no entiendo cómo este código va a enlazar mis 3 mesas? ¿Tiene algún código más para mí o enlaces para leer su código? –

Cuestiones relacionadas