我正在使用MVC3,并使用Entity Framework 4.0实体作为我的模型.到目前为止,就使用它作为模型而言,一切都很有效(所有的crud操作/页面生成开箱即用).我想知道,你如何获得与手动生成模型时相同的强大标签和验证信息?
这是我的意思的一个例子.这是一个由MVC3示例项目生成的类:
public class LogOnModel
{
    [Required]
    [Display(Name = "User name")]
    public string UserName { get; set; }
    [Required]
    [DataType(DataType.Password)]
    [Display(Name = "Password")]
    public string Password { get; set; }
    [Display(Name = "Remember me?")]
    public bool RememberMe { get; set; }
}
通过上面的示例,您可以指定在字段的标签中显示的内容(显示)以及要使用的字段类型(密码).但是,当我尝试使用实体框架并将其推送到下面的视图时,我看到自动生成的标签只是字段名称,而不是我希望用户看到/必须阅读的内容:
@using (Html.BeginForm()) {
    @Html.ValidationSummary(true)
    <fieldset>
        <legend>Person</legend>
        <div class="editor-label">
            @Html.LabelFor(model => model.FirstName)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.FirstName)
            @Html.ValidationMessageFor(model => model.FirstName)
        </div>
        <div class="editor-label">
            @Html.LabelFor(model => model.MiddleName)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.MiddleName)
            @Html.ValidationMessageFor(model => model.MiddleName) …好的,这很奇怪.我不能用BindAttribute的Include和Exclude性质与ASP.NET MVC复杂类型嵌套对象.
这是我做的:
这是我的模特:
public class FooViewModel {
    public Enquiry Enquiry { get; set; }
}
public class Enquiry {
    public int EnquiryId { get; set; }
    public string Latitude { get; set; }
}
HTTP Post动作:
[ActionName("Foo"), HttpPost]
public ActionResult Foo_post(
    [Bind(Include = "Enquiry.EnquiryId")]
    FooViewModel foo) {
    return View(foo);
}
视图:
@using (Html.BeginForm()) {
    @Html.TextBoxFor(m => m.Enquiry.EnquiryId)
    @Html.TextBoxFor(m => m.Enquiry.Latitude)
    <input type="submit" value="push" />
}
根本不起作用.如果我按照此处的说明定义BindAttributefor Enquiry类,我可以只做这项工作:
我希望能够通过新建视图模型并将贡献域模型作为参数传递(如下面的代码),将域模型映射到视图模型.我的动机是不再重复使用映射代码和提供一种简单的映射方式(不使用自动化器).一位朋友说,视图模型不应该知道有关传递给可选构造函数的"支付"域模型的任何信息.你怎么看?
public class LineItemsViewModel
{
    public LineItemsViewModel()
    {
    }
    public LineItemsViewModel(IPayment payment)
    {
        LineItemColumnHeaders = payment.MerchantContext.Profile.UiPreferences.LineItemColumnHeaders;
        LineItems = LineItemDomainToViewModelMapper.MapToViewModel(payment.LineItems);
        ConvenienceFeeAmount = payment.ConvenienceFee.Fee;
        SubTotal = payment.PaymentAmount;
        Total = payment.PaymentAmount + payment.ConvenienceFee.Fee;
    }
    public IEnumerable<Dictionary<int, string>> LineItems { get; set; }
    public Dictionary<int, string> LineItemColumnHeaders { get; set; }
    public decimal SubTotal { get; set; }
    public decimal ConvenienceFeeAmount { get; set; }
    public decimal Total { get; set; }
}
我有一个自动生成的类来导入包含这样的(缩写)的web服务:
[System.Runtime.Serialization.DataMemberAttribute()]
public System.DateTime StartDate 
{
    get 
    {
        return this.StartDateField;
    }
    set { /* implementation prop changed */ }
}
我想为此成员添加MVC格式属性.所以在另一个包含相同partial class定义的文件中,我想做类似以下的事情(这是非法的):
[DisplayFormat(DataFormatString = "{0:dd-MM-yyyy}", ApplyFormatInEditMode = true)] 
public DateTime StartDate;
部分方法在这里没有用,因为部分方法必须是私有的,具有void返回类型,必须是方法等等.
我该如何装饰这个会员?
我在数据库优先上下文中使用 EF6。在本例中,我在 MVC Web 项目中使用实体类,并希望使用各种验证和显示属性来注释实体的字段。但是,当我通过在 edmx 设计器中从数据库进行更新来刷新实体类时,类会重新生成,并且我的属性会丢失。
解决这个问题的最佳方法是什么?
这是我最近需要做的常见事情,我正在寻找任何常见的模式,以使这更容易.
它的主要内容是我有一些数据模型,它们被建模以满足ORM并且纯粹对对象进行CRUD操作.这些模型目前通过存储库/工厂公开(取决于其C或RUD).
然后,我有一个视图模型,它更具可读性,并且充满了UI关注点,例如视图之间的验证和映射数据(这是一个ASP.MVC场景,但这种情况可以在大多数情况下被抽象化).
所以我想说我去了localhost/user/1,它应该让我在数据库中找到Id 1的用户,然后在UI上显示它.最终,这必须从数据域中提取数据,然后将其映射到ui模型以用于显示目的.
以下是一个示例场景:
public class OrmUser
{
    public int Id {get;set;}
    public string Name {get;set;}
    public IList<Permission> Permissions {get;set;}
}
public class UiUser
{
    [Required]
    public int Id {get;set;}
    [Required]
    public string Name {get;set;}
    public bool IsUserAdmin {get;set;}
}
public class UserMapper : IMapper<UiUser>
{
    public UiUser Get(int id)
    {
        var ormUser = UserRepository.Get(id);
        var uiUser = new UiUser
        {
            Id = ormUser.Id,
            Name = ormUser.Name,
            IsUserAdmin = IsUserAdmin(ormUser.Permissions)
        }
    }
    private bool IsUserAdmin(IList<Permission> permissions)
    {
        return …