Как получить логин и хост подключения к бд EntityFrameworkCore
В MS-SQL с помощью suser_name() я могу получить текущий логин, а host_name() даст мне хост. Как это можно сделать в C# используя EF Core 6?
Ответы (2 шт):
Автор решения: alexsteeel
→ Ссылка
using (var ctx = new DbContext())
{
var builder = new DbConnectionStringBuilder
{
ConnectionString = ctx.Database.Connection.ConnectionString
};
var user = builder["user id"];
var dataSource = builder["data source"];
var workstationID = (ctx.Database.Connection as SqlConnection).WorkstationId;
}
Остальные доступные ключи можно посмотреть в списке Keys в builder. workstationID - это имя хоста.
Upd: для использования DbConnectionStringBuilder нужно подключить System.Data.Common, для SqlConnection - System.Data.SqlClient.
Автор решения: Konst
→ Ссылка
EF 6.0
выполнив запрос через Database.SqlQuery():
using (var ctx = new YourDBEntities())
{
string hostName = ctx.Database
.SqlQuery<string>("SELECT host_name() as hostname")
.FirstOrDefault();
}
Database.SqlQuery Метод: https://docs.microsoft.com/ru-ru/dotnet/api/system.data.entity.database.sqlquery?view=entity-framework-6.2.0
EF Core:
Можно , используя CreateCommand():
using (var db = new YourDbContext())
{
using (var command = db.Database.GetDbConnection().CreateCommand())
{
command.CommandText = "SELECT host_name() as hostname, suser_name() as username";
command.CommandType = CommandType.Text;
db.Database.OpenConnection();
using (var result = command.ExecuteReader())
{
while (result.Read())
{
string hostName = (string)reader[0];
string userName = (string)reader[1];
}
}
}
}