我正在使用 EF 做我的第一个项目,并且计划采用代码优先模型。我正在尝试找到一些有关处理相当经典的“查找表”场景的指导。
我正在处理一个非常规范的情况,我将保留地址数据。所以,我有一个简单的地址 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; }
}
在州属性中,我想存储标准的美国两字母州代码。出于验证目的,我希望在生成的地址表和相当标准的状态查找表之间有一个标准的一对多外键关系。该表可能包含一个 ID、两个字母的代码以及包含完整州名称的第三列。
我希望使用此状态查找表来填充和状态下拉样式框等,并充当对地址实体中提交的状态的验证。相当常见的东西。所以,我有几个简单的(我希望)问题。
- 我是否需要创建一个实体来代表国家实体
让 EF 创建表,或者我可以只包含表创建
DBCreation 策略中的进程并在那里播种?
- 创建该实体是否有意义,只是用作“视图”
模型”用于任何我想显示“状态选择器”的地方
- 我真的只想将两个字母的状态代码存储在地址中
实体,但这有意义吗?还是仅仅这样更有意义?
使其成为状态实体的导航属性然后显示?
我在表达自己的观点时遇到了一些困难,所以如果我不清楚,请随时询问更多细节。
提前致谢。
在用户界面中适当吗?
- 我将使状态成为它自己的类和地址的导航属性。
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; }
}
使用代码第一个 EF 将创建表,但您可以将其填充到Seed()
method.
- 您不一定需要使用视图模型,但使用共享视图在编辑表单中显示状态是有意义的。你没有提到MVC,但如果你使用它,那就很简单了
[UIHint("StatePicker")]
public virtual USState State { get; set; }
在您的 POCO 或视图模型中 - 取决于您的视图使用的内容。然后在 Views/Shared/EditorTemplates 中,添加一个部分视图 StatePicker.cshtml,它看起来像这样
@inherits System.Web.Mvc.WebViewPage<USState>
@Html.DropDownListFor(m => m, new SelectList((IEnumerable<USState>)ViewBag.USStatesAll,
"Id",
"Name",
Model==null?1:Model.Id),
"Choose--")
结合
@Html.EditorFor(m => m.State)
在你看来。
- 导航属性。您的数据库会将 USState id 存储为外键,但您的应用程序可以根据需要使用 addr.State.Code 或 addr.State.Text。它更加灵活。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)