Entity Framework Core: как обрабатывать использование разных полей из одной модели?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Entity Framework Core: как обрабатывать использование разных полей из одной модели?

Сообщение Anonymous »

По сути, как лучше всего обрабатывать модель, которая указывает на базу данных, которая будет выполнять хранимые процедуры для возврата разных столбцов в зависимости от того, являюсь ли я администратором (см. дополнительные столбцы для CRUD) или пользователем (см. домашнюю страницу) ).
Я мог бы просто вернуть каждый столбец, но это кажется очень неэффективным. Но когда я возвращаю подмножество, оно кричит на меня, потому что я не предоставляю все поля в модели. И когда я попытался создать две модели, он кричал мне, что они обе не могут указывать на одну и ту же таблицу в базе данных.
Я использую Blazor и .NET 8 с Entity. Framework Core.
Приведу здесь простой пример, который поможет объяснить мой вопрос. У меня есть таблица, сопоставленная с моделью, а также две страницы, которые хотят взаимодействовать с этой моделью. Клиентская часть, которая показывает клиенту только основную информацию, и CRUD на стороне администратора, которая позволяет добавлять/редактировать данные и просматривать дополнительные столбцы, недоступные клиенту.
Давайте используем базовую модель сотрудника следующим образом:

Код: Выделить всё

public class Employee
{
[Key]
public int ID {get; set;}
public string Name {get; set;}
public decimal Salary {get; set;}
}
Я заполняю данные с помощью простого SQL-запроса следующим образом (это будет в моем сервисе/интерфейсе):

Код: Выделить всё

public async Task GetListAsync()
{
var result = await _context.dbEmp
.FromSqlRaw("Exec getEmployees")
.ToListAsync();
return result;
}
Это для интерфейса, так что по сути

Код: Выделить всё

SELECT ID, [Name]
FROM EmployeeTable
Для серверной части выбор:

Код: Выделить всё

public async Task GetListEditAsync()
{
var result = await _context.dbEmp
.FromSqlRaw("Exec getEmployeesEdit")
.ToListAsync();
return result;
}

SELECT ID, [Name], Salary
FROM EmployeeTable
Теперь, что касается клиентского интерфейса, я получаю сообщение об ошибке, сообщающее, что я не указал значение зарплаты. Я не хочу это возвращать, потому что это просто пустая трата ресурсов. Мне не нужно, чтобы зарплата отображалась на стороне клиента, но я хочу отображать и редактировать ее на стороне администратора CRUD.
Дополнительно я попробовал:

Код: Выделить всё

[NotMapped]
И это работало, пока мне не пришлось использовать версию для администратора, а затем она не правильно сопоставила мои значения, поэтому они были просто пустыми. Ничего полезного.
Тогда я попробовал просто сделать две модели: одну для внешнего интерфейса и одну для CRUD. За исключением того, что во время выполнения я получаю сообщение об ошибке, говорящее, что я не могу сопоставить две модели с одной и той же таблицей в базе данных.
Итак, как лучше всего это сделать, кроме простого возврата всех данные в обоих случаях?
Спасибо, дайте мне знать, если вам нужна дополнительная информация, разъяснения или что-то еще.

Подробнее здесь: https://stackoverflow.com/questions/783 ... same-model
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»