Код EF 4.1 First и членство - PullRequest
       4

Код EF 4.1 First и членство

0 голосов
/ 01 ноября 2011

Я прошел через предложенные похожие вопросы, и большинство из них были очень устаревшими, так как все новые разработки с EF Code First.Я ищу идеи или как-то обойти этот «камень преткновения» в EF Code First.

Есть ли возможность использовать встроенную систему членства asp в проекте EF Code First?Одним из распространенных примеров Code First является блог, сообщение, комментарий, например, так (из: http://msdn.microsoft.com/en-us/data/gg685467):

public class Blog
{
    public int Id { get; set; }
    public string Title { get; set; }
    public string BloggerName { get; set;}
    public virtual ICollection<Post> Posts { get; set; }
  }

public class Post
{
    public int Id { get; set; }
    public string Title { get; set; }
    public DateTime DateCreated { get; set; }
    public string Content { get; set; }
    public int BlogId { get; set; }
    public ICollection<Comment> Comments { get; set; }
}

public class Comment
{
    public int Id { get; set; }
    public DateTime DateCreated { get; set; }
    public string Content { get; set; }
    public int PostId { get; set; }
    public Post Post { get; set; }
}

Это невероятно, за исключением того, что нет способа отследить пользователя, который оставил комментарий.что можно сделать для того, чтобы первый код наподобие этой вещи работал с членством asp.net?

Первое, что приходит на ум, это что-то вроде (просто работа с комментариями здесь):

public class UserProfile
{
    public Guid Id { get; set; }
    public string FirstName { get; set; }
    public string FavoriteColor { get; set; }
    //Other useless user profile stuff here
}    
public class Comment
{
    //Comment fields same as above
    public UserProfile Owner { get; set; }
}

Первое, что приходит на ум, - это изменить действие Register в контроллере учетных записей, чтобы при регистрации пользователя его Guid (возможно, также и имя пользователя) также добавлялся в таблицу UserProfile, созданную EF Code First.было бы своего рода мостом между моими таблицами EF Code First и таблицами членства asp.net.

Имеет ли этот подход какой-либо смысл? Каковы некоторые плюсы / минусы и есть ли лучшие варианты?

Ответы [ 2 ]

1 голос
/ 01 ноября 2011

Да, это один из способов сделать это.Во-вторых, вам на самом деле не нужен доступ к членству, все, что вам нужно, это имя пользователя, которое при входе пользователя в систему с помощью FormsAuthentication заполнит IPrincipal.

var username = User.Identity.Name;

или

HttpContext.Current.User.Identity.Name;

Любая другая информация, которая может вам понадобиться, доступна из API членства.

MembershipUser user = Membership.GetUser(User.Identity.Name);

Не пытайтесь отобразить таблицы членства ASP.NET в вашей модели данных, так как этовызвать проблемы с поставщиком членства по умолчанию.Просто используйте API членства, чтобы получить любую необходимую информацию.

1 голос
/ 01 ноября 2011

Установите элементы членства aspnet в вашу базу данных. Тогда вы не будете использовать CodeFirst на этих объектах. Однако вы можете просто прочитать, кто пользователь, из MembershipProvider. Эти таблицы могут быть запрошены напрямую, если вам нужно (но API членства должен дать вам то, что вам нужно) Вы также можете запустить инструмент «обратного инжиниринга» из мощных инструментов инфраструктуры сущностей, чтобы дать вам сущности, с которыми можно работать напрямую.

Вы можете получить больше информации об установке в вашу БД здесь. Использование HttpContext.Current.Application для хранения простых данных

Мощные инструменты предназначены для преобразования ваших таблиц в первые объекты кода после их добавления в БД:

http://visualstudiogallery.msdn.microsoft.com/72a60b14-1581-4b9b-89f2-846072eff19d

...