Я пытаюсь использовать классы метаданных, чтобы иметь возможность сохранить наши атрибуты проверки при регенерации класса модели.Однако из предложенных рекомендаций я постоянно сталкиваюсь с проблемами.
При обновлении или регенерации класса модели он создает / обновляет DatabaseModel.edmx > DatabaseModel.tt
автоматически сгенерированными классами tablename.cs
.Я не могу их редактировать, если не хочу потерять атрибуты проверки.
Согласно документации Microsoft , я создал классы Metadata.cs
и Partial.cs
в папке Model.или даже пытался создать класс для таблицы базы данных, используя следующий пример кода:
using System;
using System.ComponentModel.DataAnnotations;
namespace CApp.Models
{
[MetadataType(typeof(ConsultantMetaData))]
public partial class Consultant
{
}
public class ConsultantMetaData
{
[Required]
[Display(Name = "Name")]
public string ConsultantName { get; set; }
[Required]
[EmailAddress]
[Display(Name = "Email")]
public string ConsultantEmail { get; set; }
[Required]
[Display(Name = "Is Active")]
public bool IsActive { get; set; }
}
}
И вот тогда я начинаю получать ошибки неоднозначности.
«Консультант» является неоднозначнымссылка между 'CApp.Data.Consultant' и 'CApp.Models.Consultant'
Подмодель по умолчанию, создающий контроллер Index, Details, Create, Edit и Delete и последующие виды, затрагивается.По умолчанию все они используют автоматически сгенерированный код классов моделей для получения и установки данных.
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include ="ConsultantId,ConsultantName,ConsultantEmail,IsActive")] Consultant consultant)
{
if (ModelState.IsValid)
{
db.Consultants.Add(consultant);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(consultant);
}
Или:
// GET: Consultants/Edit/5
public ActionResult Edit(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Consultant consultant = db.Consultants.Find(id);
if (consultant == null)
{
return HttpNotFound();
}
return View(consultant);
}
Я получу неявную ошибку преобразования:
Невозможно неявно преобразовать тип 'CApp.Data.Consultant' в 'CApp.Models.Consultant'
В методе, если я изменю Консультанта на:
CApp.Data.Consultant consultant = db.Consultants.Find(id);
Затем данные получаются обычным образом, а атрибут проверки отображения игнорируется и по-прежнему отображает имя столбца таблицы вместо требуемого атрибута отображаемого имени.
Не уверен, как мне следует извлечь и отобразить модельданные, чтобы он отображал информацию, которая мне нужна, кроме того, чтобы вручную ввести имя нужного столбца в представлении, которое не является целью.Мне кажется, что я бегаю кругами здесь, и я еще не нашел нужного мне ответа на этом форуме.
Правильно ли я также предположил, что класс метаданных, содержащий аннотации разыскиваемых данных, нуждается вчтобы точно соответствовать автоматически сгенерированной модели в терминах столбцов в таблице или мне нужно только указать настраиваемые столбцы, для которых мне нужно настраиваемое отображаемое имя или другие настраиваемые атрибуты?
Любая помощь будет оценена.Крайне нуждаюсь в объяснении с примерами, пожалуйста.