Код Entity Framework сначала сопоставляет / объединяет aspnet_Users - PullRequest
1 голос
/ 29 июня 2011

Сначала мне было интересно с кодом Entity Framework 4.1, как вы, ребята, обрабатываете запросы, которые включают существующую таблицу aspnet_Users?

В основном у меня есть требование для запроса, включающего aspnet_Users, чтобы я мог вернуть имя пользователя:

SELECT t.Prop1, u.Username
FROM Table1 t 
INNER JOIN aspnet_User u ON t.UserId = u.UserId
Where t.Prop2 = true

В идеале в linq я хотел бы:

from t in context.Table1
join u in context.aspnet_Users on t.UserId equals u.UserId
where t.Prop2 = true

Но я не уверен, как получить сопоставление aspnet_Users с классом User? как сделать aspnet_Users частью моего dbset?

Буду признателен за любую помощь, заранее спасибо

Ответы [ 3 ]

2 голосов
/ 29 июня 2011

Не отображать таблицу aspnet_Users или любую другую таблицу, связанную с aspnet. Эти таблицы имеют собственный доступ к данным и собственную логику доступа. Отображение этих таблиц приведет к дублированию кода, возможным проблемам и разделению проблем. Если вам нужны пользователи для запросов, создайте представление только с необходимой информацией, такой как идентификатор, имя пользователя, адрес электронной почты и сопоставьте представление. Дело в том, что представление будет только для чтения, оно будет содержать только разрешенные данные, и ваше приложение не будет случайно изменять эти данные без использования ASP.NET API.

1 голос
/ 29 июня 2011

Сначала прочитайте ответ Ладислава. Если вы все еще хотите пойти дальше: чтобы сделать то, что вы хотите, потребуется сопоставить таблицы пользователей, ролей и членов в домене codefirst, что означает написание провайдера членства в коде в первую очередь.

К счастью, есть проект для этого http://codefirstmembership.codeplex.com/, хотя это не идеальная реализация. Оригинал VB, посмотрите на вкладке Обсуждение мою работу по запуску его в c # MVC.

Я работаю с автором над лучшей реализацией, которая защищает данные о членстве (пароль, дата последнего входа в систему, все недопустимые данные), но позволяет отображать и расширять таблицу пользователей. Но он еще не готов!

0 голосов
/ 29 июня 2011

На самом деле вам не нужно использовать Entity Framework для доступа к учетным записям провайдера aspnet_membership. Вам просто нужно создать экземпляр объекта членства, передать уникальный идентификатор пользователя и логическое значение, указывающее, следует ли обновить значение LastActivityDate для пользователя, и метод возвращает объект MembershipUser, заполненный текущими значениями из источника данных для указанный пользователь.

Затем вы можете получить доступ к имени пользователя, используя свойство «Имя пользователя».

Пример:

private MembershipUser user = 
    Membership.GetUser(7578ec40-9e91-4458-b3d6-0a69dee82c6e, True);

Response.Write(user.UserName);

Если у вас есть дополнительные вопросы о MembershipProvider, вы можете прочитать об этом на веб-сайте MSDN под заголовком « Управление пользователями с помощью членства ».

Надеюсь, это поможет вам с вашим требованием.

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