我很难理解如何在MVC中使用会员资格。我知道有内置的ASPNETDB数据库,它有用户等所有基本表。但是,如果我想在我的一个自定义表和这个内置用户表之间添加关系呢?
如果我有一个包含博客评论的数据库表,我们称之为评论。并且每个评论都有一个与之关联的用户ID,我可以做类似的事情吗?
User.Comments.Add(someCommentObj)
有人知道这篇文章很好吗?这甚至可能吗?
由于
答案 0 :(得分:0)
查看有关MembershipProvider的这篇文章:
http://www.4guysfromrolla.com/articles/120705-1.aspx
查看第6部分和第7部分,您可能希望实现自定义ProfileProvider并将注释引用存储在配置文件中。
第6部分 - 使用以下方法捕获其他特定于用户的信息 档案系统。了解这个 内置的SqlProfileProvider。
第7部分 - 会员,角色和个人资料系统都是使用构建的 提供者模型,允许 他们的实施非常
答案 1 :(得分:0)
如果您想使用自己的自定义会员表,那么您需要构建自己的MembershipProvider。 Matt Wrock有walkthrough:
您会注意到默认的AccountModel允许您注入自己的提供者:
public AccountMembershipService(MembershipProvider provider)
{
_provider = provider ?? Membership.Provider;
}
Nerdinner有一个dependency injection的例子,你可能觉得它很有用:
答案 2 :(得分:0)
警告以下是两种可行的解决方案。第一个很容易。第二个,我认为是你所追求的,但是把它当作它的价值。确保你意识到你在做什么,因为这将获取会员提供者数据并直接访问它,如果你不小心(如删除数据),这可能会导致一些隐藏的炸弹。
会员资料仅用于验证;授权角色;用户特定数据的配置文件(如时区或喜欢的颜色。
解决方案一
如果您想在当前用户(或任何用户)下添加评论,您可以这样做:
var comment = new Comment(....);
comment.userId = User.Identity.Name; //for user name
或
comment.userId = new Guid(Membership.GetUser().ProviderUserKey); //for guid in table
这是一种方式,你永远不会直接访问aspnet表,只需使用它的信息。
解决方案二
我假设你在VS中使用L2S和设计师。
通过将会员表添加到您的L2S设计中,您将可以访问其数据。对于某些快速查询(例如日期,锁定信息等等),这甚至可能更为可取,因为您不必使用内置的sprocs,这些sprocs有一些严重的过度杀戮和繁重的代码。如果您在数据库或L2S设计器中创建关系,您将拥有一个可以像问题一样访问的关系。
此时,设计人员已为评论和用户创建了课程。如果您对刚刚创建的实际用户表执行任何操作,则会绕过成员资格提供者的设计 - 除非您现在正在做什么,否则不要这样做。向用户添加注释时,它会将注释添加到注释表中,并保持正确的关系。
您现在应该能够:
var user = MyUser.GetById(userId);
user.Comments.Add(comment);
请记住,在这种情况下,用户与您的用户不同
var user = Membership.GetUser(userId);