Malikdanish Ответов: 1

Как я могу использовать ту же модель для другого представления с меньшим количеством полей


У меня есть два представления , и оба должны быть строго типа мой класс модели имеет в общей сложности 8 столбцов , и мой первый вид нуждался во всех этих десяти полях, поэтому я поставил обязательный валидатор на все поля, но на другом представлении мне просто нужны первые 4 поля, а остальные я не знаю, так что теперь я использую ту же модель, но при сохранении требуемого entity framework говорит, что есть ошибка проверки, так как я не предоставляю остальные четыре поля для второго представления .

https://i.postimg.cc/MpXKnhMD/modelerror.jpg[^]

Что я уже пробовал:

Когда я попробовал ModelState.Удалите("пароль") и другие поля перед сохранением записи он работает для всех полей, но не работает только для поля пароля .
ModelState.Remove("Password"); does not work while saving the record it still gives error like "{"Validation failed for one or more entities. See 'EntityValidationErrors' property for more details."} When i drildown i found it shows error on Password field althoguh before saving i am excluding the Password field using ModelState.Remove("Password");
Even the Exclude property also did not work

1 Ответов

Рейтинг:
2

F-ES Sitecore

Создайте модель, которая реализует только 4 поля, необходимые для второго представления, а затем создайте модель, которая наследуется от этой модели и имеет другие поля для первого представления. Тогда это просто вопрос передачи правильной модели правильному представлению.

class SmallView
{
    // common four properties
}

class LargeView : SmallView
}
    // properties only on the large view
}


Malikdanish

не следует ли мне создать небольшое представление всего с четырьмя свойствами и затем использовать это представление но как мне сопоставить это представление с той же таблицей с которой сопоставлено первое представление

F-ES Sitecore

Да, вам, вероятно, понадобятся два разных представления, иначе у вас будет представление, которое имеет дело со свойствами, которые не существуют или не имеют отношения к делу.

Malikdanish

F_ES от Sitecore
ModelState.Удалить("FirstName");
ModelState.Удалить("Фамилия");
ModelState.Удалить("ReportingManager");
ModelState.Удалить("ResetPasswordCode");
ModelState.Удалить("Мобильный Телефон");
ModelState.Удалить("Пароль");
почему он не удаляет пароль из модели

Malikdanish

Теперь получаю эту ошибку messsage
Тип сущности ActivateUser не является частью модели для текущего контекста..
Описание: необработанное исключение возникло во время выполнения текущего веб-запроса. Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и о том, где она возникла в коде.

Сведения Об Исключении: Система.InvalidOperationException: тип сущности ActivateUser не является частью модели для текущего контекста.

Ошибка Источника:


Строка 162: // ModelState["Пароль"].Ошибки.Четкий();
Строка 163: // Регистрация.Пароль = "ASDF";
Строка 164: db.Entry(ActivateUsers).State = EntityState.Модифицированный;
Строка 165: попробуйте
Строка 166: {

F-ES Sitecore

Если это автоматически сгенерированные классы Entity Framework, то вам, вероятно, будет трудно сделать их наследуемыми. Вероятно, вам лучше оставить классы EF такими, какими они были, и создать новые классы для использования только в качестве моделей представлений, а не передавать классы EF в ваши представления.

Это потребует немного больше работы ног, так как вам нужно будет получить свои данные из контекста

var efData = контекст.таблица MyTable.Где(....);

затем создайте свой класс модели представления и скопируйте свойства поверх него

var model = новый MyView();
модель.Которых prop1 = efData.Которых prop1;
модель.Prop2 = efData.Prop2;

Таким образом, у вас будет свой класс EF, представляющий данные, затем у вас будет класс модели представления, специфичный для каждого представления, и вы будете копировать данные между ними по мере необходимости.

Malikdanish

у меня есть пользовательские созданные классы, а не созданные entity framework классы.

Malikdanish

Типы сущностей "ExtendedUser" и "Registration" не могут совместно использовать таблицы "Registrations", поскольку они не находятся в одной иерархии типов или не имеют допустимого отношения внешнего ключа один к одному с соответствующими первичными ключами между ними.