Как получить логин и хост подключения к бд 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];
            }
        }
    }
}
→ Ссылка