将entity framework与多个MS SQLSERVER数据库一起使用
我来回搜索,但似乎无法掌握我需要的东西。 如果最近得到回答,我很抱歉。 重新定向讨论对我有好处。
这就是场景。 我被指示从我的老板转移到Microsoft Visual Foxpro(MS正在撤回2015年的支持)到.Net C#。 为了良好的基础和最佳实践的采用,我决定先学习,将相关信息拼凑起来,然后开始编码。 这是第二年。
我们是一家上市公司,为50多个客户提供工资处理外包服务。 每个客户端目前都有自己的数据库。 数据库具有完全相同结构的表。
我是新手。 完全是.net世界的新东西。
我从使用数据表,数据加载器的原始SQL开始,但在我的研究中,我得到了一些讨论令人沮丧。 许多人认为entity framework应该达到目的。 但是,允许混合方法,特别是涉及复杂查询时。
有人能指出我的一些“好读”,我可以用50多个缩进数据库实现Entity Framework。 每个数据库都是完全独立的,没有任何其他数据库。 当用户登录时,他们选择处理工资单所需的客户端,然后EF指向该数据库。
EF需要2条不同的信息来处理数据库中的数据:
1)数据库模式:它作为编译代码包含在应用程序中,通常不能在运行时更改。
2)连接字符串:这是在运行时提供的,通常来自配置文件。
在您的情况下,所有数据库都具有相同的模式,因此您可以只模拟一个数据库,它将适用于所有其他数据库。
您要更改的部分是连接字符串。 这告诉EF如何查找数据库,并且可以在运行时提供。
DbContext
构造函数有一个重载, DbContext
连接字符串作为参数: MSDN: DbContext Constructor (String)
框架中甚至有一些类可以帮助您创建连接字符串:
MSDN: EntityConnectionStringBuilder Class
MSDN: Connection String Builders
这很简单
我有,
//WMSEntities is conection string name in web.config //also the name of Entitiframework public WMSEntities() : base("name=WMSEntities") { }
已经在自动生成的edmx文件夹的Model.Context.cs中
为了在运行时连接到多个数据库,我创建了另一个构造函数,它在同一个文件Model.Context.cs中将连接字符串作为参数如下所示
public WMSEntities(string connStringName) : base("name=" + connStringName) { }
现在,我在Web.Config中添加了其他连接字符串
其中CoreDbContext是Project中扩展DbContext(任何EF项目的标准部分)的主要EF类。
一次只谈一个
如果你只使用每个应用程序一个,那么任何EF教程都可以 。
唯一的主要技巧是在发生架构更改时迁移这些Dbs。 有两种基本方法。 无论哪种方式,您都可以获取备份并在本地恢复它们的副本,以便您可以针对它们测试迁移( update-database -f -verbose
)。 如果你不这样做,你冒着数据错误的风险,例如将列更改为NOT NULL,并且发现本地测试实例没有空值,一个客户端就这样做了,kaboom。 一旦你让他们工作,你就决定如何更新生产。 您可以通过多种方式执行此操作,包括编写自定义前滚/后退工具(或查找一个),将SQL脚本检入git,雇用DBA或更简单:
明显的SQL脚本
将迁移转储到SQL( update-database -script
)并针对实际的生产数据库运行它。
我少数Dbs的疯狂方式
将每个数据库的条目添加到Web.Config,并为每个数据库创建一个项目配置,如“DbDeployClient1”,“DbDeployClient2”等。在每个数据库中创建一个类似于DbDeployClient1的构建定义,然后将其添加到您的DbContext类中:
public CoreDbContext() #if DbDeployClient1 : base("DbDeployClient1") #elseif DbDeployClient2 : base("DbDeployClient2") // etc #endif {
这使您可以快速切换到DbDeploy配置,并直接从Visual Studio对目标数据库运行迁移。 显然,如果你这样做,你需要暂时打开一个端口,最好只允许你的IP,在你正在迁移的实际SQL Server实例上。 一个很好的例子就是你可以从你的迁移中获得明确的错误,以及完全的回滚function,而不需要任何实际工作 – 所有你正在利用的回滚支持只是EF的一部分。 一个开发人员可以做到这一点,没有一堆其他瓶颈。 但它有很多机会降低风险并提高自动化程度。
上述就是C#学习教程:将entity framework与多个MS SQLSERVER数据库一起使用分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/959991.html