我确实通过了类似的问题提出建议,而且自从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成员资格表之间的桥梁。
这种方法有意义吗?有什么优点/缺点,有没有更好的选择?
答案 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即可获得所需的任何信息。