Как я могу добавить отношения в базу данных aspnetdb в MVC? - PullRequest
1 голос
/ 02 февраля 2010

Мне трудно думать о том, как использовать членство в MVC. Я знаю, что есть встроенная база данных ASPNETDB, в которой есть все основные таблицы для пользователей и тому подобное. Но что, если я хочу добавить связь между одной из моих пользовательских таблиц и этой встроенной пользовательской таблицей?

Если бы у меня была таблица базы данных, которая содержала комментарии в блоге, мы назовем ее Комментарий. И с каждым комментарием был связан идентификатор пользователя, могу ли я сделать что-то вроде?

User.Comments.Add (someCommentObj)

Кто-нибудь знает хорошую статью по этому поводу? Это вообще возможно?

Спасибо

Ответы [ 3 ]

0 голосов
/ 23 февраля 2010

Если вы хотите использовать свои собственные пользовательские таблицы членства, вам нужно создать свой собственный MembershipProvider. Мэтт Врок имеет прохождение :

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

public AccountMembershipService(MembershipProvider provider)
{
    _provider = provider ?? Membership.Provider;
}

У Нердиннера есть пример внедрения зависимостей , который вы, вероятно, найдете полезным:

0 голосов
/ 25 января 2011

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

Данные о членстве предназначены только для аутентификации;роли для авторизации;профили для пользовательских данных (например, часовой пояс или любимый цвет.

Solution One

Если вы хотите добавить комментарий под текущим пользователем(или любого пользователя) вы можете сделать:

var comment = new Comment(....);
comment.userId = User.Identity.Name; //for user name

или

comment.userId = new Guid(Membership.GetUser().ProviderUserKey); //for guid in table

Это хороший способ, и у вас никогда не будет прямого доступа к таблицам aspnet, вы просто используете его информацию.

Решение второе

Я предполагаю, что вы используете L2S и конструктор в VS.

ДобавляяИз таблицы (-ов) членства в вашем проекте L2S вы получите доступ к его данным. Это может даже оказаться предпочтительным для некоторых быстрых запросов (таких как даты, информация о блокировке и т. д., поскольку вам не нужно использовать встроенныеsprocs с серьезным избыточным и тяжелым кодом.) Если вы создадите связь в БД или в конструкторе L2S, у вас будут отношения, к которым вы можете получить доступ, как задает ваш вопрос.

На этомТочка, дизайнер создал ваши классы для комментариев и пользователей. Если вы делаете что-нибудьУчитывая фактическую пользовательскую таблицу, которую вы только что создали, вы обойдете дизайн провайдера членства - не делайте этого, если вы не знаете, что делаете.Когда вы добавляете комментарий к Пользователю, он добавит комментарий к таблицам комментариев с правильной неповрежденной связью.

Теперь вы должны иметь возможность:

var user = MyUser.GetById(userId);
user.Comments.Add(comment);

Помните, чтоПользователь в этом случае отличается от того, когда вы делаете

var user = Membership.GetUser(userId);
0 голосов
/ 02 февраля 2010

Посмотрите на эту обширную статью на MembershipProvider:
http://www.4guysfromrolla.com/articles/120705-1.aspx

Посмотрите на части 6 и 7, вы, вероятно, захотите реализовать собственный ProfileProvider и сохранить ссылку на комментарий вПрофиль.

Часть 6 - сбор дополнительной пользовательской информации с использованием системы профилей.Узнайте о встроенном SqlProfileProvider.

Часть 7 - системы членства, ролей и профилей строятся с использованием модели провайдера, что позволяет их реализациям быть очень

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