使用Entity Framework的MVC4成员资格连接

时间:2012-10-09 12:32:03

标签: ef-code-first asp.net-membership asp.net-mvc-4

我使用Entity Framework创建了一个DbContext连接,并在我的web.config文件中有“DbContext”连接字符串。

然后,我尝试登录,我的网站要求我有另一个“defaultConnection”字符串来创建用户表。

在这种情况下,我需要有两个连接吗?或者我应该以某种方式将两者结合起来?

哪个性能更好?我开始使用Internet Application模板构建我的项目。

2 个答案:

答案 0 :(得分:1)

默认情况下,成员资格和角色,ASP.net基础结构使用默认成员资格和角色提供程序,将成员资格和角色数据存储在不同的数据库中。运行您的应用程序,如果您从登录页面注册用户,您可以在创建的位置“App_Data”文件夹中看到数据库。数据库不同,因此连接字符串不同。您正在使用实体框架,因此有两种方法可以从这里开始。

1)更改连接字符串并使用相同的默认asp.net成员资格和角色提供程序将数据存储在实体框架配置正在使用的数据库中。我的意思是默认成员资格和角色提供程序使用EF配置指向的数据库。

2)使用EF管理成员资格和角色数据。因此,用户和组将是由DBcontext作为其他实体管理的实体。

我最近实施了第二种方法。 ASP.net成员资格提供了钩子(可扩展性)来实现您自己的提供者并在web.config文件中注册它们。然后创建用户和角色实体并将其包含在DBContext中。当然,在注册提供程序之前,您需要首先通过派生MembershipProviderRoleProvider抽象类来实现它们。这些类位于`System.Web.Security'命名空间中。

您可以按照此项目获取更多详细信息http://codefirstmembership.codeplex.com/

我认为与单独数据库的连接不会对性能产生任何影响。在Web模型中,即使您对传入请求使用相同的数据库,我们也必须单独连接到数据库,并且传入的请求可以并发。事实上,将数据库保持独立会将数据库加载到另一台服务器。但现在您有2台服务器需要备份和维护。这是不可维护的,除非您希望您的会员资料由于某些原因而被分开,例如它也被其他应用程序共享。

答案 1 :(得分:0)

我建议将两者结合起来,因为在某些时候你可能会想要从各种表到Users表的外键。

我在web.config中有一个连接,“DefaultConnection”。

然后在初始化DbContext时,使用DbContext(string)重载来使用DefaultConnection,如下所示:var context = new YourDbContext("DefaultConnection");

这样,您的数据和用户/角色表就会幸福地生活在一起。