【问题标题】:MVC3 View Model versus Entity Framework ModelMVC3 视图模型与实体框架模型
【发布时间】:2012-07-03 08:50:39
【问题描述】:

不知道如何解释,但这里是......

我使用 EF 4.3 构建了代码优先数据模型。类之一,“地址”包含典型的地址数据,街道、城市、州等。模型中的其他类包含“地址”类的实例。

问题。数据将使用不同的视图收集/呈现,其中一些需要地址字段,另一些则不需要。

我可以构建不同的视图模型,每个模型都有必要的验证属性,并在数据模型和视图模型之间来回复制数据,但这似乎是错误的。

我错过了什么?必须有更聪明的方法来做到这一点。

感谢您的帮助, 吉米

【问题讨论】:

    标签: asp.net-mvc-3 entity-framework


    【解决方案1】:

    首先阅读这些问题及其答案:

    这篇文章也可以提供帮助:

    总之,我认为在大多数情况下,拥有一个胖乎乎的域模型 (DM) 但与之相关的轻量级表示模型 (PM) 会很有帮助。因此,当我们只想编辑胖 DM 的一小部分时,我们的一位 PM 会举手。

    想象一下 DM 中的这个类:

    namespace DomainModels
    {
        public class Person
        {
             public int ID { get; set; }
             public string FirstName { get; set; }
             public string MiddleName { get; set; }
             public string LastName { get; set; }
             public DateTime? DoB { get; set; }
             public MyAddressDM Address { get; set; }
             public string Phone { get; set; }
             public IEnumerable<MyCarModel> Cars { get; set; }
             //etc.
         }
    }
    

    现在假设在一个视图中我们只需要编辑地址和电话。一个轻量级的 PM 可能是这样的:

    namesapce PresentationModels
    {
         public PersonAddressPhone
         {
             public int ID { get; set;}
             public string FullName { get; set;}
             public string AddressSteet { get; set; }
             public string AddressCity { get; set; }
             public string AddressState { get; set; }
             public string AddressZipCode { get; set; }
             public string Phone { get; set; }
         }
    }
    

    在另一个视图中,我们需要为一个人添加/删除汽车:

    namesapce PresentationModels
    {
         public PersonCars
         {
             public int ID { get; set;}
             public string FullName { get; set;}
             public IEnumerable<PMCar> Cars { get; set;}
         }
    }
    

    DO 和 PM 之间的映射是这个难题的黄金部分。一定要看看AutoMapper

    【讨论】:

    • 感谢托希德。你让我深思。我正在阅读并重新阅读您指出的文章。还检查了 AutoMapper。 -再次感谢,吉米
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-22
    • 2012-02-23
    • 1970-01-01
    • 2011-09-08
    • 2011-07-04
    • 1970-01-01
    • 2016-02-19
    相关资源
    最近更新 更多