我们使用Entity Framework 5,但是还要求我们使用应用程序中的常规数据库连接来执行我们需要执行的某些自定义SQL。
所以,我正在创建一个处理此连接的DatabaseAccess类。有没有办法通过检查实体框架连接字符串来填充连接字符串?
所以:
SqlConnection cnn;
connetionString = "Data Source=ServerName;Initial Catalog=DatabaseName;User ID=UserName;Password=Password"
我可以通过检查实体框架构建它吗?
答案 0 :(得分:65)
您可以使用以下命令获取EF使用的连接字符串:
MyDbContext.Database.Connection.ConnectionString
或者标记表示你可以使用sqlconnection
来启动上下文答案 1 :(得分:20)
是的,你可以。
有关3个选项,请参阅here。
1 - 为每个
使用单独的连接字符串2 - 从你的实体对象中提取它(这是我想你想要的)
3 - 使用实体对象来执行自定义SQL
以下是如何做nr 2:
using System.Data.EntityClient;
using System.Data.SqlClient;
...
private string GetADOConnectionString()
{
SalesSyncEntities ctx = new SalesSyncEntities(); //create your entity object here
EntityConnection ec = (EntityConnection)ctx.Connection;
SqlConnection sc = (SqlConnection)ec.StoreConnection; //get the SQLConnection that your entity object would use
string adoConnStr = sc.ConnectionString;
return adoConnStr;
}
答案 2 :(得分:14)
以下是如何获取EF 5,EF 6和EF Core 1 / EF 7中的连接字符串。
//Entity Framework 5
myContext.Database.Connection.ConnectionString
//Entity Framework 6
myContext.Database.Connection.ConnectionString
//Entity Framework Core 1
myContext.Database.GetDbConnection().ConnectionString
有关详细信息,请参阅 - http://nodogmablog.bryanhogan.net/2016/04/entity-framework-checking-the-connection-string-of-your-context/
答案 3 :(得分:8)
你的意思是,你可以在你的EF DbContext中使用SqlConnection吗?
DbContext类有一个constructor,您可以在其中传入SqlConnection,然后告诉EF它是否拥有它。
var YourContext = new YourContext(SqlConnection, true);
答案 4 :(得分:6)
即使在EF3中,您也可以使用EntityConnectionStringBuilder。
EntityConnectionStringBuilder conn =
new EntityConnectionStringBuilder(DBEntities.dbConnection);
SqlConnection s = new SqlConnection(conn.ProviderConnectionString);
答案 5 :(得分:5)
我也有这个问题,解决你可以做到的问题:
SqlConnection con = context.Database.Connection as SqlConnection;
SqlCommand command = new SqlCommand(sql, con);
con.Open();
SqlDataReader reader = command.ExecuteReader();
while (reader.HasRows)
{
while (reader.Read())
{
//read your fields
}
reader.NextResult();
}
con.Close();
答案 6 :(得分:2)
以下是获取连接字符串的一般方法:
public string GetConnString<T>(T ent)
where T : ObjectContext
{
EntityConnection ec = (EntityConnection)ent.Connection;
SqlConnection sc = (SqlConnection)ec.StoreConnection;
return sc.ConnectionString;
}
然后使用它将是:
MyEntities ent = new MyEntities();
String ConnString = GetConnString(ent);
答案 7 :(得分:2)
希望有所帮助......
private readonly ApplicationDbContext _applicationDbContext;
string connectionString = string.Empty;
public CommonService(ApplicationDbContext applicationDbContext)
{
_applicationDbContext = applicationDbContext;
connectionString = _applicationDbContext.Database.GetDbConnection().ConnectionString;
}
答案 8 :(得分:2)
//实体框架5
myContext.Database.Connection.ConnectionString
//实体框架6
myContext.Database.Connection.ConnectionString
//实体框架核心1
myContext.Database.GetDbConnection().ConnectionString
答案 9 :(得分:0)
就我而言,我只需要执行一条update语句,因此我使用了以下结构
_db.Database.ExecuteSqlCommand($"update ChiusureTurni set esportato = 1 where idChiusuraTurni = {idChiusura}");
在这种情况下,_db是我的数据库上下文,因此我采用了事务管理