use*_*022 18 c# sql-server entity-framework asp.net-web-api
我有一台服务器托管50个具有相同模式的数据库,我想在下一版本中开始使用Entity Framework.
我不需要为每个数据库建立新连接.一个连接的权限可以与所有50个数据库进行通信,并且对于数据管理和速度(这是一个WebAPI应用程序)我不希望每次与每个数据库通信时实例化一个新的EF上下文,如果我不必,除非当然每次请求到达服务器时都会发生这种情况,那么没什么大不了的.
我真正需要的是能够更改USE [databasename]命令,我假设最终从EF发送到服务器.
有没有办法在代码中实现这一目标?EF是否在Context中保持读/写属性,该属性引用可以在调用SaveChanges()等之前动态更改的数据库名称.
谢谢!!!
短发
小智 13
不要努力工作,聪明地工作!!!!
MYContext localhostContext = new MYContext();
MYContext LiveContext = new MYContext();
//If your databases in different servers
LiveContext.Database.Connection.ConnectionString = LiveContext.Database.Connection.ConnectionString.Replace("localhost", "Live");
//If your databases have different Names
LiveContext.Database.Connection.ConnectionString = LiveContext.Database.Connection.ConnectionString.Replace("DBName-Localhost", "DBName-Live");
Run Code Online (Sandbox Code Playgroud)
数据库的结构应该是相同的;)
你可以看看:
如果需要任何其他帮助,请告诉我。
编辑
更新第二个链接指向SqlConnection.ChangeDatabase方法。
所以最终代码看起来类似于以下内容:
MetadataWorkspace workspace = new MetadataWorkspace(
new string[] { "res://*/" },
new Assembly[] { Assembly.GetExecutingAssembly() });
using (SqlConnection sqlConnection = new SqlConnection(connectionString))
using (EntityConnection entityConnection = new EntityConnection(workspace, sqlConnection))
using (NorthwindEntities context = new NorthwindEntities(entityConnection))
{
// do whatever on default database
foreach (var product in context.Products)
{
Console.WriteLine(product.ProductName);
}
// switch database
sqlConnection.ChangeDatabase("Northwind");
Console.WriteLine("Database: {0}", connection.Database);
}
Run Code Online (Sandbox Code Playgroud)
小智 5
很简单
我有
public WMSEntities() : base("name=WMSEntities") //WMSEntities is conection string name in web.config also the name of EntityFramework
{
}
Run Code Online (Sandbox Code Playgroud)
已经在edmx文件夹的自动生成的Model.Context.cs中。
为了在运行时连接到多个数据库,我创建了另一个构造函数,该构造函数将连接字符串作为参数,如下所示,在同一文件Model.Context.cs中
public WMSEntities(string connStringName)
: base("name=" + connStringName)
{
}
Run Code Online (Sandbox Code Playgroud)
现在,我在Web.Config中添加了其他连接字符串,例如
<add name="WMSEntities31" connectionString="data source=TESTDBSERVER_NAME;initial catalog=TESTDB;userid=TestUser;password=TestUserPW/>
<add name="WMSEntities" connectionString="data source=TESTDBSERVER_NAME12;initial catalog=TESTDB12;userid=TestUser12;password=TestUserPW12/>
Run Code Online (Sandbox Code Playgroud)
然后,当连接到数据库时,我调用以下方法,将connectionString名称作为参数传递
public static List<v_POVendor> GetPOVendorList(string connectionStringName)
{
using (WMSEntities db = new WMSEntities(connectionStringName))
{
vendorList = db.v_POVendor.ToList();
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
22319 次 |
最近记录: |