rai*_*sul 9 c# asp.net-mvc-4 ef-migrations entity-framework-5
我正在使用Entity Framework 5 Code-first approch.这是我的Context文件:
using IMS.Domain.Inventory;
using IMS.Domain.Security;
using IMS.Domain.StoredProcedures;
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
using System.Data.Objects;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace IMS.Domain.DBContext
{
public class IMSDBContext : DbContext
{
public DbSet<ModuleAccounting> ModuleAccountings { get; set; }
public DbSet<ModuleInfo> ModuleInfos { get; set; }
public DbSet<ModuleType> ModuleTypes { get; set; }
public DbSet<UserAccounting> UserAccountings { get; set; }
public DbSet<UserGroup> UserGroups { get; set; }
public DbSet<UserInfo> UserInfos { get; set; }
//
// set a connection string
public IMSDBContext() // Constructor of the Context
{
this.Database.Connection.ConnectionString =
"Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=IMSDB;Data Source=.\\SQLExpress";
}
}
Run Code Online (Sandbox Code Playgroud)
}
这里我在构造函数中添加了连接字符串.但有没有办法将"提供者名称"添加到连接字符串?
小智 9
您是否有特殊原因要在db上下文中对连接字符串进行硬编码.通常它应该存储在配置文件中.您可以在配置文件中指定提供程序,并从上下文中引用连接字符串.这将解决您的问题.
public MyDbContext()
: base("Name=MyDbContext")
{
}
Run Code Online (Sandbox Code Playgroud)
并在您的配置文件中
<connectionStrings>
<add name="MyDbContext" connectionString="data source=.\sqlexpress;initial catalog=YourDbName;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient"/>
</connectionStrings>
Run Code Online (Sandbox Code Playgroud)
是:您可以准备一个DbConnection类型,该类型可以传递给由底层提供程序构建并正确构建连接字符串的DbContext.
所以要在CODE中实现这个连接字符串...见下文
<connectionStrings>
<add name="MyCTX" connectionString="Data Source=localhost;Initial Catalog=MYDB ;Integrated Security=True;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />
</connectionStrings>
Run Code Online (Sandbox Code Playgroud)
回想一下,DBContext有一个重载的构造函数
public DbContext(DbConnection existingConnection, bool contextOwnsConnection)
Run Code Online (Sandbox Code Playgroud)
所以你只需要由底层工厂提供商构建的Dbconnection.看到
public interface IDbConnectionFactory
Run Code Online (Sandbox Code Playgroud)
这3种类型所包含的内容:
System.Data.Entity.Infrastructure.SqlCeConnectionFactory System.Data.Entity.Infrastructure.LocalDbConnectionFactory System.Data.Entity.Infrastructure.SqlConnectionFactory
所以这是一个使用SQLConnectionFactory的例子.返回一个DBConnection.哪个可以传递给DBContext.您可以在编程休闲时重复/更改或变量.对于其他2个提供商.
public DbConnection GetSqlConn4DbName(string dataSource, string dbName) {
var sqlConnStringBuilder = new SqlConnectionStringBuilder();
sqlConnStringBuilder.DataSource = String.IsNullOrEmpty(dataSource) ? DefaultDataSource : dataSource;
sqlConnStringBuilder.IntegratedSecurity = true;
sqlConnStringBuilder.MultipleActiveResultSets = true;
// NOW MY PROVIDER FACTORY OF CHOICE, switch providers here
var sqlConnFact = new SqlConnectionFactory(sqlConnStringBuilder.ConnectionString);
var sqlConn = sqlConnFact.CreateConnection(dbName);
return sqlConn;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
42359 次 |
| 最近记录: |