.net C中MVC的最佳实践

时间:2015-06-23 07:36:37

标签: c# asp.net-mvc entity-framework

我是MVC框架的新手。我正在使用entityframework DBcontext来执行数据库相关的操作。我这样做 的 的EntityFramework - >的DbContext - >模型 - >控制器 - >查看。 我直接绑定模型来查看。例如有表名 UserProfile ,我创建了与Model相同的Model和colum作为Model的属性。我正在从 Userprofile 中收集记录集,并将此集合直接绑定到View。 这是模型

[Table("UserProfile")]
public class UserProfile
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    [DisplayName("ID")]

    public long UserId { get; set; }
    private string _UserName;
    public string UserName
    {
        get { return _UserName; }
        set { _UserName = value; }

    }
    public string Thalassemic
    {
        get;
        set;
    }

    [Display(Name = "Your First Name")]
    [Required(ErrorMessage = "First Name is Required.")]
    [StringLength(30, ErrorMessage = "First Name must be {2}-{1} to long", MinimumLength = 2)]
    [RegularExpression("^[a-zA-z ]+$", ErrorMessage = "First name must contain only characters")]
    public string FirstName { get; set; }

    [Display(Name = "Your Last Name")]
    [Required(ErrorMessage = "Last Name is Required.")]
    [RegularExpression("^[a-zA-z ]+$", ErrorMessage = "Only characters are allowed.")]
    [StringLength(20, ErrorMessage = "First Name must be {2}-{1} to long", MinimumLength = 2)]
    public string LastName { get; set; }

    [Required(ErrorMessage = "Email Address is Required.")]
    [StringLength(250, ErrorMessage = "{0} must be {2}-{1} to long", MinimumLength = 4)]
    [Display(Name = "Email Address")]
    [DataType(DataType.EmailAddress, ErrorMessage = "Please enter a valid email-address.")]
    [RegularExpression("^([a-zA-Z0-9_\\-\\.]+)@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([a-zA-Z0-9\\-]+\\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)$", ErrorMessage = "Please enter a valid email-address.")]
    //todo: re-think about updating email address as we are user email as login id and this can't change
    public string Email { get; set; }}

我是否应该使用此DTO对象将数据与视图绑定

public class UserProfileDTO
{
    public long UserId { get; set; }
    private string _UserName;
    public string UserName
    {
        get { return _UserName; }
        set { _UserName = value; }
    }
    public string Thalassemic
    {   get;
        set;
    }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Email { get; set; }
}

基于以上我想知道这是正确的方法吗?如果不是那么最佳做法是什么?

2 个答案:

答案 0 :(得分:3)

在MVC中通常不鼓励使用数据库POCO类作为模型,而不是仅包含视图所需数据的视图模型。想象一下,您有一个包含30多个字段的User条记录,但您只想显示Username,您只需创建一个UsernameViewModel

public class UsernameViewModel
{
    public string Username { get; set; }
}

它更清晰,因为您只是向客户端发送您需要的字段。

答案 1 :(得分:0)

正如@mat所说,不建议在视图中直接使用POCO类。 建议不要使用它,因为用户永远不能修改POCO值,当你想向用户显示多个POCO时会发生什么? (我希望你的回答不是“修改POCO以满足用户的要求”)。

此外,如果您的应用程序是n层,强烈建议使用一些DTO在层之间传输数据。

作为使用DTO类的建议和好处,您可以查看msdn链接here,或者作为演示部分,根据您对codeproject here的要求,提供了一个很好的教程。

阅读有关您的问题here

的stackoverflow的更多信息