Использование Entity Framework для создания пользовательской модели, которая не является моделью какой-либо таблицы в базе данных - PullRequest
0 голосов
/ 07 ноября 2018

Я впервые использую .NetCore Entity Framework и хочу узнать, возможно ли создать собственную модель.

При настройке приложения EF создал все модели из базы данных. Это нормально и ожидаемо.

Однако теперь я создал новый контроллер, который возвращает данные, являющиеся результатом сложного запроса linq.

Все остальные мои контроллеры возвращают такую ​​модель:

return View(characterList);

где символList - это фактическая модель таблицы базы данных.

Но как мне создать совершенно новую пользовательскую модель, которая не представляет таблицы в базе данных?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018

Если модель, которую вы объясняете, предполагается использовать только для представлений, рассмотрите возможность создания ViewModel, который в основном является классом, который содержит только свойства, необходимые для представления, обычно без какой-либо логики или только с логикой, немедленно необходимой для отображения в вид.

Например, вы бы создали новый класс, скажем, CharacterVM

public class CharacterVM
{
    public string Name{ get; set; }

    public string CharacterType {get; set; }

    public bool Invincible{ get; set; }
}

По вашему мнению, вы будете использовать CharacterVM, у которого есть все свойства, доступные в классе CharacterVM

@model CharacterVM

Наиболее важным шагом является переназначение свойств из вашей модели базы данных (скажем, это называется Character), где все, что вам нужно сделать в этом случае, это переназначить свойства Character в свойства нового экземпляр CharacterVM вы бы передали в представление.

public IActionResult Index(int idCharacter)
{
    var character = db.Characters.SingleOrDefault(c => c.idCharacter == idCharacter);

    var characterVM = new CharacterVM()
    {
        Name = character.Name,
        CharacterType = character.Type.Name,
        Invincibility = false
    };

    return View(characterVM);
}
0 голосов
/ 07 ноября 2018

Сначала вы просто создадите модель, которую хотите иметь в своем коде. Например:

Public class NewModel {
Public String Test {get; set;}
}

Затем вы можете использовать свой контекст и силу linq / select для запроса в вашей новой модели. Примерно так:

List<NewModel> list = dbContext.Set<OldModel>().Where(...).Select<NewModel>(x=> new NewModel(){ Test = x.OldTestString }).ToList()

И вот вы получите список новой модели. Вы могли бы, например, включить другие таблицы и объединить их в запрос, чтобы сделать его более сложным. Но этот пример должен дать вам отправную точку.

...