2012-04-06 8 views
9

Estoy haciendo mi primer proyecto con EF y estoy planeando usar el modelo de primer código. Estoy tratando de encontrar un poco de orientación sobre el manejo de un escenario de "tabla de búsqueda" bastante clásico.Mejores prácticas para las tablas de búsqueda en EF Code-First

Estoy lidiando con una situación bastante canónica donde estaré persistiendo los datos de dirección. Por lo tanto, tengo una dirección sencilla DTO ...

public class Address 
    { 
     public int Id { get; set; } 
     public virtual string StreetAddress1 { get; set; } 
     public virtual string StreetAddress2 { get; set; } 
     public virtual string City { get; set; } 
     public virtual string State { get; set; } 
     public virtual string ZipCode { get; set; } 
    } 

En la propiedad estatal, me gustaría almacenar los EE.UU. código estándar de dos letras. Con fines de validación, me gustaría tener una relación de clave externa de uno a muchos estándar entre la tabla de direcciones resultante y una tabla de búsqueda de estado bastante estándar. Esa tabla probablemente contendría una ID, el código de dos letras y una tercera columna para contener el nombre completo del estado.

Esperaría usar esta tabla de búsqueda de estado para rellenar y indicar cuadros de estilo desplegables, etc. y también actuar como una validación para el estado archivado en la entidad de dirección. Bastante común. Entonces, tengo un par de preguntas simples (espero).

  1. ¿Es necesario crear una entidad para representar a la entidad estatal sólo para haber EF crear la tabla, o puedo incluir la tabla creación proceso de una estrategia de DBCreation y sembrar allí?
  2. tendría sentido para crear esa entidad, sólo para usar como "vista modelos" para cualquier lugar donde quiero mostrar un "estado-picker"
  3. En realidad sólo quiero para almacenar el código de dos letras en la entidad de dirección , pero, ¿tiene sentido o tiene más sentido que solo convertirlo en una propiedad de navegación para una entidad de estado y luego mostrar?

Luché un poco para expresar mi punto aquí, así que si no estoy seguro, no dude en solicitar más detalles.

Gracias de antemano. apropiadamente en la IU?

+0

3- Personalmente uso una entidad solo porque puede evitar los errores tipográficos de los usuarios. También garantizo consistencia si la usas en muchas entidades (ahora o más adelante). Pero si su aplicación es bastante pequeña o no necesita demasiada validación, no veo demasiada contraindicación para colocar directamente las dos letras directamente en su entidad de Dirección. – Mathieu

Respuesta

7
  1. Me gustaría hacer el Estado es propia clase y una propiedad de navegación de la Dirección.
public class Address 
{ 
    public int Id { get; set; } 
    public virtual string StreetAddress1 { get; set; } 
    public virtual string StreetAddress2 { get; set; } 
    public virtual string City { get; set; } 
    public virtual USState State { get; set; } 
    public virtual string ZipCode { get; set; } 
} 

public class USState 
{ 
    public int Id { get; set; } 
    public string Code { get; set; } 
    public string Text { get; set; } 
} 

Con el código primero de EF creará la tabla, pero se puede rellenar en el método Seed().

  1. No es necesario utilizar necesariamente ver modelos, pero tiene sentido utilizar una vista compartida para mostrar los estados en un formulario de edición. Usted no menciona MVC, pero si se utiliza que, entonces es tan simple como poner
[UIHint("StatePicker")] 
public virtual USState State { get; set; } 

en su modelo POCO o ver - dependiendo de lo que utiliza su punto de vista. Luego, en Vistas/Shared/EditorTemplates, añadir una vista parcial StatePicker.cshtml, que sería algo así como looke

@inherits System.Web.Mvc.WebViewPage<USState> 
@Html.DropDownListFor(m => m, new SelectList((IEnumerable<USState>)ViewBag.USStatesAll, 
    "Id", 
    "Name", 
    Model==null?1:Model.Id), 
    "Choose--") 

en combinación con

@Html.EditorFor(m => m.State) 

en su opinión.

  1. Navegación de la propiedad. Su db almacenará el ID de USState como una clave externa, pero su aplicación puede usar add.State.Code o addr.State.Text, dependiendo de la necesidad. Es mucho más flexible.
+0

¿Qué sucede si está utilizando ViewModels? He intentado el enfoque anterior y parece que no funciona? ¿Cómo correlacionaría el Id y la entidad de búsqueda en el objeto? – Burt

+0

@Burt Mi ejemplo anterior no está completo, pero la técnica funcionará para usar un modelo de vista o usar directamente el modelo. Con el código EF primero, el marco hace el mapeo por usted. Tengo una buena (y más reciente) introducción a EF y MVC [aquí] (http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/creating-an-entity -framework-data-model-for-an-asp-net-mvc-application) –

1
  1. Sí sólo se puede crear un nuevo guión DBCreation extender el guión original y crear una tabla de estado que no tiene relación con el marco de la entidad.

  2. Si yo fuera usted, crearía la entidad estatal. Si no se crea la entidad del estado, al final necesita crearla en el código, pero llenar esta entidad será un problema, tendrá que usar sql (puede almacenar esta información en xml, lo que parece una mejor opción que almacenarla en sql).

  3. Si decide almacenar la tabla en la base de datos y usarla directamente creando una entidad, convertirla en una propiedad de navegación es una mejor opción ya que puede usarla directamente mientras la carga es lenta o está ansiosa por incluirla.

Cuestiones relacionadas