С объектными объектами вы можете использовать классы друзей, в результате чего вы создаете второй класс, который действует как поставщик метаданных для вашего объекта. Например, с помощью сущности Customer, сгенерированной Linq-to-Sql, я мог бы создать класс друзей, например, так:
[MetadataType(typeof(CustomerMeta))]
partial class Customer {
}
public class CustomerMeta {
[DisplayName("Forename", Required(ErrorMessage = "Forename is required.")]
public string Forename { get; set;}
}
Объекты создаются как частичные классы, поэтому вы можете добавить к ним свой собственный код.
В качестве альтернативы, вы можете отказаться от передачи типов ваших сущностей на ваши представления и создать конкретные модели, основанные на требуемой функциональности, например, у меня обычно будет сущность User, но когда мне нужно создать User, у меня есть нечто, называемое CreateUserSpec модель:
public class CreateUserSpec
{
[DisplayName("Forename")]
public string Forename { get; set; }
}
Имеет подмножество свойств пользователя, только те, которые необходимы для создания пользователя. Это модель, которую я передам своему представлению и снова заполню из данных формы. Например:
public class AccountController
{
public ActionResult Register() {
return View(new CreateUserSpec());
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Register(CreateUserSpec spec) {
if (!ModelState.IsValid) {
return View(spec);
}
var user = UserFactory.CreateUser(spec);
// Redirect to authorisation page?
}
}