EF6每个客户端有一个数据库(相同的上下文)

时间:2015-02-13 19:03:57

标签: asp.net-mvc-5 connection-string entity-framework-6 database-migration dbcontext

我正在开发一个ASP.Net MVC 5应用程序,它将成为我的客户的SaaS。我想使用EF6,我目前正在使用localDb。我是一名实体Framwork初学者,我很难学习它。过去两天我一直在网上搜索,发现了不同的方法,但从来没有找到适合我的方法来回答我的问题。

我在ASP.Net MVC 4和5上关注了Scott Allen教程,目前,我有2个上下文,' IdendityDbContext'和' MyAppDbContext'两者都使用名为MyAppDb.mdf

的数据库指向DefaultConnection sting

我希望我的客户能够登录网站并连接到他们自己的数据库,因此我计划为每个客户创建一个新的ConnectionString(和数据库),并为我的客户端保留一个ConnectionString帐户信息。 IdendityDbContext。

我有很多问题,但这里有两个最重要的问题:

1)我不知道该怎么做并在本地测试。我是否必须为所有客户端创建新的数据连接,当客户端连接时,我会动态编辑连接字符串并将其传递给' MyAppContext' ?

2)即使我能够做到这一点,让我说我有200个客户,这意味着我将拥有201个数据库:1个账户数据库(IdentityDbContext)和200个客户端数据库(MyAppDbContext)。如果我将来更改我的模型,是否意味着我必须为每个200个数据库运行包管理器控制台迁移命令行?这看起来很残酷。必须有一种方法可以在每个客户数据库上轻松传播我的模型吗?

对不起,很长一段时间,非常感谢你。

2 个答案:

答案 0 :(得分:1)

(1)的答案基本上是"是",你需要这样做。 (2)的答案是您必须针对所有数据库运行迁移。我无法想象你会怎么想其他的方法,你有200个独立的数据库,都需要相同的架构更改。实现这一目标的唯一方法是针对每个脚本运行相同的脚本(或迁移)。这是像你一样的单租户模式的缺点。

答案 1 :(得分:0)

你应该知道的一些事情,因为你是所有这一切的新手。首先,LocalDB仅用于开发。在开发过程中使用它很好,但请记住,在部署时需要一个完整的SQL Server实例。令人惊讶的是这是多么常见的挂断,所以我只想确保你知道门。

其次,迁移(至少是代码优先迁移)用于开发。您永远不应该对生产数据库运行代码优先迁移。这不仅要求您实际直接从Visual Studio访问生产数据库,这本身就是一个非常大的禁忌,但除非您明确知道哪些内容正在发生变化,否则不应该在生产数据库上发生任何事情。我有write-up about how to migrate production databases可能值得一看。

对于像你的200数据库场景这样的东西,从Red Gate投资这样的东西可能会更好。