EF 4.1 Code First和会员资格

时间:2011-11-01 04:44:33

标签: asp.net-mvc-3 entity-framework-4.1 ef-code-first

我确实通过了类似的问题提出建议,而且自从EF Code First的所有新开发以来,大多数都已经过时了。我正在寻找想法或某种方式围绕这个EF Code First“绊脚石”。

无论如何使用内置的asp会员系统和EF Code First项目?一个常见的Code First示例是Blog,Post,Comment like(来自: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(可能还有他们的用户名)也会添加到EF Code First创建的UserProfile表中。我想这个表是我的EF Code First表和asp.net成员资格表之间的桥梁。

这种方法有意义吗?有什么优点/缺点,有没有更好的选择?

2 个答案:

答案 0 :(得分:1)

将aspnet成员资格项安装到您的数据库中。您将不会在这些实体上使用CodeFirst。但是,您只需从MembershipProvider中读取用户的身份即可。如果需要,可以直接查询这些表(但会员API应该为您提供所需的) 您还可以从实体框架电动工具运行“逆向工程”工具,为您提供直接使用的实体。

您可以在此处获取有关安装到数据库的更多信息。 Using HttpContext.Current.Application to store simple data

一旦将表添加到db:

,电动工具就可以将表反向工程为代码优先实体

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

答案 1 :(得分:1)

是的,这是一种方法。另一个是您实际上不需要访问成员资格,您只需要用户名,当用户通过FormsAuthentication登录时,将填充IPrincipal。

var username = User.Identity.Name;

HttpContext.Current.User.Identity.Name;

您可能需要的任何其他信息都可以从Membership API访问。

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

不要试图将ASP.NET Membership表映射到您的数据模型中,因为这会导致默认成​​员资格提供程序出现问题。只需使用会员API即可获得所需的任何信息。