Это правильное использование шаблона ViewModel? - PullRequest
1 голос
/ 10 октября 2009

Я использую NerdDinner как руководство для моего первого проекта MVC / LINQ to SQL. В нем обсуждается использование шаблона ViewModel, когда представлению требуются данные из нескольких источников - в их примере: Обеды и страны (служит раскрывающимся списком).

В моем приложении проблема немного другая. Это не столько разные данные, сколько данные, связанные через ключевое ограничение. У меня есть таблица Story, которая связывается с aspnet_users через ключ UserId. Я хотел бы иметь легкий доступ к имени пользователя для каждой истории.

Поскольку я использую шаблон репозитория и в некоторых случаях возвращаю IQueryable для отложенного выполнения, я пытаюсь найти правильный способ формирования данных. Поэтому я сейчас использую этот шаблон VideModel, чтобы заставить его работать, но не уверен, что это правильный путь.

Вместо извлечения IQueryable Story (который не будет работать, поскольку мне нужно имя пользователя), я возвращаю новый пользовательский класс UserStory, который имеет свойство Story и строковое свойство Username.

Что ты думаешь?

Ответы [ 3 ]

1 голос
/ 10 октября 2009

Похоже, ваш вопрос имеет меньшее отношение к MVC, поскольку это просто вопрос о том, как получить доступ к данным истории на основе строки имени пользователя.

Можно ли создать представление в вашей базе данных со всеми данными UserStory, именем пользователя и идентификатором пользователя? Таким образом, вы можете выбирать из представлений на основе вашего имени пользователя.

Чтобы создать представление, вам просто нужно сделать соединение между таблицей пользователя и таблицей истории пользователя на основе идентификатора пользователя.

После этого вы все равно можете использовать шаблон хранилища с возвращаемым IQueryable.

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

0 голосов
/ 11 октября 2009

Если вы посмотрите на Kigg, вы увидите, что они путаются с исходной моделью для создания пользовательских моделей представления. Это то, что NerdDinner не раскрывает в деталях. Вы можете создать класс StoriesWithUserName, который наследуется от Stories, но добавляет новое свойство - UserName. Затем вы возвращаете это в свое представление, которое будет наследоваться от IEnumerable

[EDIT]

К сожалению. Не заметил, что ты уже сделал это: о)

0 голосов
/ 10 октября 2009

Использование шаблона репозитория и возврат IQueryable of Stories - это нормально. Эта связь позволяет вам получить доступ к значению имени пользователя примерно так:

Предполагается, что вы возвращаете IQueryable в объекте вашей модели:

foreach(Story story in Model.Stories)
{
    // do something with the value
    response.write(story.aspnet_user.UserName);
};

Ваш метод репозитория будет выглядеть так:

public List<Stories> GetStories(Guid UserId)
{
    return datacontext.Stories.Where(u => u.UserId = UserId).ToList();
}

Отношение автоматически предоставит вам доступ к значению UserName в цикле foreach, о котором я впервые упомянул. больше ничего не требуется.

Я не уверен, почему ваш контроль нумерации страниц не был выполнен на Count (), хотя ??

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...