1

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

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

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

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

4

2 回答 2

1

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

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

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

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

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

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

于 2012-10-09T13:30:49.100 回答
0

我建议将两者结合起来,因为在某些时候,您可能需要从各种表到用户表的外键。

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

然后当你初始化你的时DbContext,使用DbContext(string)重载来使用 DefaultConnection,像这样:var context = new YourDbContext("DefaultConnection");

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

于 2012-10-09T13:49:09.547 回答