using System; using System.Collections.Generic; using System.Linq; using System.Web; using CardNumbers.Objects; namespace CardNumbers.Models { public class ClientViewModel { public Client Client { get; set; } public int id { get; set; } } }So, is there a way to have the Client in the Objects project clean and have some extra validations in ViewModel instead?
using System; using System.Web.Mvc; using System.ComponentModel.DataAnnotations; using System.ComponentModel; using DataAnnotationsExtensions; using System.ComponentModel.DataAnnotations.Schema; using System.Collections.Generic; namespace CardNumbers.Objects { [ComplexType] public class PhoneInfo { [DataType(DataType.PhoneNumber)] [DisplayName("Phone")] [RegularExpression(@"^((\(\d{3}\)|\d{3})\s?)?\d{3}[-\s]?\d{4}\s*$", ErrorMessage = "Please enter valid Phone Number")] public virtual string Phone { get; set; } [StringLength(5)] [DisplayName("Ext")] public virtual string Ext { get; set; } public bool HasValue { get { return (Phone != null || Ext != null); } } } [ComplexType] public class ContactDetail { //Constructor public ContactDetail() { phoneInfo = new PhoneInfo(); } [StringLength(100)] [DisplayName("Contact Name")] [DisplayFormat(NullDisplayText = "")] public virtual string Contact { get; set; } [Email] [StringLength(100)] [DataType(DataType.EmailAddress)] [DisplayName("Email")] public virtual string Email { get; set; } public virtual PhoneInfo phoneInfo { get; set; } public bool HasValue { get { return (Contact != null || Email != null || phoneInfo.HasValue); } } } /// <summary> /// Client class (Client No, Client Name, Address, Contact1, Contact2 info, Created By, Modified By (operator and date) /// </summary> public class Client { public Client() { Contact1 = new ContactDetail(); Contact2 = new ContactDetail(); } [Key] [Editable(false)] [Column("ClientId",TypeName = "int")] public virtual int Id { get; set; } [Required] [DisplayName("Client No")] [UIHint("Number")] [Column("client_no", TypeName = "smallint")] [Remote("doesClientNoExist", "Client", HttpMethod = "POST", ErrorMessage = "Client Number already exists. Please enter a different Client Number.")] public virtual Int16 Number { get; set; } [Required] [Column("client_name", TypeName = "varchar")] [DisplayName("Client Name")] [MaxLength(30, ErrorMessage = "Client Name should not be longer than 30 characters" )] [MinLength(3, ErrorMessage = "Client Name is too short")] [Remote("doesClientNameExist", "Client", HttpMethod = "POST", ErrorMessage = "Client Name already exists. Please enter a different Client Name.")] public virtual string Name { get; set; } [DataType(DataType.MultilineText)] public virtual string Address { get; set; } public virtual ContactDetail Contact1 {get; set;} public virtual ContactDetail Contact2 {get; set;} [ForeignKey("EnteredByOperator")] public string EnteredBy { get; set; } [InverseProperty("ClientsEnteredBy")] public virtual Operator EnteredByOperator { get; set; } [ForeignKey("ModifiedByOperator")] public string ModifiedBy { get; set; } [InverseProperty("ClientsUpdatedBy")] public virtual Operator ModifiedByOperator { get; set; } [DataType(DataType.DateTime)] [DisplayName("Created on")] public DateTime EnteredOn { get; set; } [DataType(DataType.DateTime)] [DisplayName("Modified on")] public DateTime? ModifiedOn { get; set; } public virtual ICollection<ClientOrder> ClientOrders { get; set; } public virtual ICollection<Reorder> Reorders { get; set; } } }So, I don't really like this mix.