I'm doing my first project with EF and I'm planning to go the code-first model. I'm trying to find a bit of guidance about handling a fairly classic "lookup table" scenario.
I'm dealing with a pretty canonical situation where I'll be persisting address data. So, I have a simple address 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; }
}
In the state property, I'd like to store the standard US two-letter state code. For validation purposes, I'd like to have a standard one-to-many foreign key relationship between the resulting Address table and a fairly standard state lookup table. That table would probably contain an ID, the two-letter code, and a third column to contain the full state name.
I would expect to use this state lookup table to populate and state drop-down style boxes, etc and also act as a validation to the State filed in the address entity. Fairly common stuff. So, I have a couple of simple (I hope) questions.
I struggled a bit with articulating my point here, so if I'm not clear, feel free to ask for more detail.
Thanks in advance. appropriately in the UI?
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; }
}
With code first EF will create the table, but you can populate it in the Seed()
method.
[UIHint("StatePicker")]
public virtual USState State { get; set; }
in your POCO or view model - depending on what your view uses. Then in Views/Shared/EditorTemplates, add a partial view StatePicker.cshtml, which would looke something like
@inherits System.Web.Mvc.WebViewPage<USState>
@Html.DropDownListFor(m => m, new SelectList((IEnumerable<USState>)ViewBag.USStatesAll,
"Id",
"Name",
Model==null?1:Model.Id),
"Choose--")
in combination with
@Html.EditorFor(m => m.State)
in your view.