EF Code First 4.1: как сопоставить Member.UserId с aspnet_Users.UserId? - PullRequest
0 голосов
/ 19 декабря 2011

У меня есть Member класс:

public class Member
{
    // key 
    public Guid UserId { get; set; }

    // some other fields
}

Также у меня есть таблица aspnet_Users с UserId первичным столбцом.

Мы можем:

1).Добавьте дополнительное свойство MembershipUser к объекту Member и получите его значение, вызвав метод Membership.GetUser(this.UserId).

Также я добавил

context.Database.ExecuteSqlCommand("ALTER TABLE [dbo].[Members]  WITH CHECK ADD  CONSTRAINT [FK_Members_aspnet_Users] FOREIGN KEY([UserId]) REFERENCES [dbo].[aspnet_Users] ([UserId])"); 

в метод DataContext.Seed() дляубедитесь, что Member нельзя добавить без учетной записи aspnet_Users.

2).Используйте свободный API в OnModelCreating.Если это хороший случай, как правильно сопоставить их?

Какой лучший выбор?Есть мысли?

Ответы [ 2 ]

1 голос
/ 19 декабря 2011

Независимо от того, как я пытался избежать этого, я обнаружил, что лучший способ - реализовать мой собственный MembershipProvider и использовать его для моей модели, а не пытаться вставить мою модель во встроенный членство провайдера.

Если вы идете по другому маршруту, вам необходимо сопоставить таблицы членства ASP.NET с вашим доменом и получить класс Member из класса ASP_User (или наоборот, если вы хотите убедиться, что все пользователи, которых вы создаете, являются членами) , В конце концов, я обнаружил, что, хотя кажется, что нужно приложить больше усилий, реализация MembershipProvider является более простым подходом.

0 голосов
/ 19 декабря 2011

Ты не.Не добавляйте ограничения внешнего ключа к таблицам aspnet_ *.Это рецепт для неприятностей.Членство в системе типа плагина, и вы должны рассматривать его как черный ящик.

Просто ищите данные в ваших таблицах с помощью MembershipUser.ProviderUserKey в качестве значения.Как то так:

from m in Member where UserID == (Guid)Membership.GetUser().ProviderUserKey select t;
...