如何在MVC中添加与aspnetdb数据库的关系?

时间:2010-02-01 23:10:34

标签: c# asp.net asp.net-mvc

我很难理解如何在MVC中使用会员资格。我知道有内置的ASPNETDB数据库,它有用户等所有基本表。但是,如果我想在我的一个自定义表和这个内置用户表之间添加关系呢?

如果我有一个包含博客评论的数据库表,我们称之为评论。并且每个评论都有一个与之关联的用户ID,我可以做类似的事情吗?

User.Comments.Add(someCommentObj)

有人知道这篇文章很好吗?这甚至可能吗?

由于

3 个答案:

答案 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);