将我的 Code First Entity Framework 创建的数据库移动到 Default Membership Provider 数据库

Posted

技术标签:

【中文标题】将我的 Code First Entity Framework 创建的数据库移动到 Default Membership Provider 数据库【英文标题】:Move my Code First Entity Framework created database to the Default Membership Provider database 【发布时间】:2012-06-08 17:13:48 【问题描述】:

我有一个已构建的 ASP.NET MVC3 应用程序,它有两个数据库。

其中一个引用了默认成员资格提供程序,是在我构建应用程序时自动创建的。

另一个是我命名为 SchoolContext 的数据库,我希望将 SchoolContext 中的所有信息与 Default Membership Provider 中的所有数据存储在同一个数据库中。

这是我的两个连接字符串:

<add name="ApplicationServices" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient" />
<add name="SchoolContext" connectionString="Data Source=|DataDirectory|School.sdf" providerName="System.Data.SqlServerCe.4.0" />

我尝试将ApplicationServices 重命名为SchoolContext,然后注释掉我的第二个连接字符串,我可以使用默认会员提供程序加载并“登录”就好了,但是每当我需要将数据库排队以获取以下信息时存储在原始SchoolContext 中,我收到错误消息,指出模型不存在等。 .并且数据不是在包含来自默认成员资格提供程序的信息的数据库中构建的。

如果模型发生变化,我将使用初始化程序来重建数据库:

public class SchoolInitializer : DropCreateDatabaseIfModelChanges<SchoolContext>

每当我在模型中编辑某些内容并且我正在使用两个数据库方案时,这都可以正常工作。但是,当我想将两个数据库合二为一时,它不起作用。

我显然不知道如何连接两个数据库,因为我试图做的事情不起作用,我应该如何正确设置 mvc 以将我的 SchoolContext 放入与默认会员所需信息相同的数据库中提供者?

【问题讨论】:

【参考方案1】:

两个可能的答案:

    如果我理解您的意图,您正在尝试使用两个单独的数据库 上下文并执行跨它们连接的查询。这是 在实体框架中是不可能的(在撰写本文时),尽管它可能 将来考虑。有关更多详细信息,请参阅此帖子: https://***.com/a/8536400/941058

    如果您需要合并信息,则需要在内存中进行 使用 LINQ。本质上你需要存储外键 任一数据库中的信息,并在查询一个或 另一个。

    如果您不尝试跨上下文加入,而只是想将默认成员资格提供程序与 EF 一起使用,请考虑以下事项: http://efmembership.codeplex.com/

【讨论】:

您在 2 上提供的链接(我还没有时间通读所有内容,但看起来很有希望) - 我是否正确理解它将默认成员资格提供程序信息安装到数据库中也可以有我自己的自定义实体框架数据(即我的SchoolContext)? 是的,这就是选项 #2 的要点。祝你好运! :-) @misc 如果这有助于回答您的问题,请将其标记为已回答。

以上是关于将我的 Code First Entity Framework 创建的数据库移动到 Default Membership Provider 数据库的主要内容,如果未能解决你的问题,请参考以下文章