用户表ID和sqlmembershipprovider

时间:2011-08-03 14:35:29

标签: asp.net-mvc

我正在为我的第一个ASP.NET MVC 3应用程序使用表单身份验证,因此有一个用于登录站点的dbo.aspnet_Users表和用于管理角色和角色分配的dbo.aspnet_Roles和dbo.aspnet_UsersInRoles表分别

数据库是SQL Server。

此外,我的应用程序数据库中有一个Users表,其布局如下:

UserID (PK, int, not null)
Name (varchar(50), not null)
Phone (varchar(45), null)
Location (varchar(45), null)

UserID PK用作各种其他表作为外键,例如,来自特定位置的用户列表将被检索并显示在我的网站页面的下拉列表中等。

我遇到的断开是当我登录页面时,我想显示一个特定于用户的列表,例如,我创建的最新食谱,虽然我可以从下拉列表中选择自己来获取UserID,但是我希望它与我的登录ID相关联。

我不确定我是否有一个非常好的解决方案。我的一个想法是在我的应用程序的数据库中创建一个查找表,将UserID从我的应用程序的Users表映射到aspnet_Users表中的GUID,类似于

UserGUID(PK, uniqueidentifier, not null )
UserID(PK, int, not null)

然后检索GUID(不确定如何),查看并使用关联的UserID“知道”我是哪个用户。我希望这是有道理的。

任何人都面临类似的情况?你会如何解决这个问题?


更新

我当前的方法是将UserGUID列(uniqueidentifier)添加到我的应用程序的Users表中,然后创建一个看起来像这样的BaseController:

public abstract class BaseController : Controller
{
   public Guid UserGuid { get; set; }
   public int UserID { get; set; }

   protected BaseController()
   {
      try 
      {
         UserGuid = (Guid)Membership.GetUser().ProviderUserKey;
         var db = new IceCreamEntities();
         UserID = db.Users.Where(m => m.UserGUID == UserGuid).First().UserID;
      }
      catch (NullReferenceException)
      {
         UserGuid = Guid.Empty;
         UserID = 0;
      }
   }
}

和他们我有我的各种控制器继承BaseController而不是Controller,所以他们将该功能作为基础构造函数的一部分。然后在我的控制器操作中,我需要用UserID填写一个字段,我可以这样做:

[HttpPost]
public ActionResult Create(IceCreamFlavorViewModel viewmodel)
{
   ...

   flavor.CreatedBy = this.UserID;

   ...
}

到目前为止似乎工作正常,但我仍然对别人如何解决这个问题感兴趣。

1 个答案:

答案 0 :(得分:2)

我在我的mvc应用程序中使用了相同的技术,并且它在过去一年中工作正常。但是,如果您在开发过程中没有走得那么远,还有另一种方法可以考虑。您可以考虑使用ProfileProvider来存储用户特定信息,而不是滚动您自己的系统。请看下面的链接 http://odetocode.com/articles/440.aspx
http://www.vbforums.com/showthread.php?p=3352498
Implementing Profile Provider in ASP.NET MVC