Entity framework EFcore3.1从sys.master_文件和SERVERPROPERTY获取值

Entity framework EFcore3.1从sys.master_文件和SERVERPROPERTY获取值,entity-framework,entity-framework-core,ef-core-3.0,entity-framework-core-3.0,Entity Framework,Entity Framework Core,Ef Core 3.0,Entity Framework Core 3.0,我需要我的(控制台)应用程序来获取一些一般SQLserver数据库信息 在SQLserver management studio中,我在主系统数据库上运行以下查询: SELECT @@VERSION, name, physical_name, size, SERVERPROPERTY('Edition'), SERVERPROPERTY('ProductVersion'), SERVERPROPERTY('MachineName') FROM sys.master_files WHERE nam

我需要我的(控制台)应用程序来获取一些一般SQLserver数据库信息

在SQLserver management studio中,我在主系统数据库上运行以下查询:

SELECT @@VERSION, name, physical_name, size, SERVERPROPERTY('Edition'), SERVERPROPERTY('ProductVersion'), SERVERPROPERTY('MachineName')
FROM sys.master_files
WHERE name = 'mydb'
我得到了一个表,其中只有一行和我需要的7列值

如何从EFcore执行此操作

我知道我需要使用
ExecuteSqlRaw
,因为我没有也不想要DBContext,但是我不确定
-如何在主系统表上执行它?和
-如何获得结果?(因为弦很好)


感谢任何帮助

我最终解决了这个问题:

var server = "localhost";
var username = "user";
var password = "password";
var conString = "Server=" + server + ";Database=master;User Id=" + username +";Password=" + password;

string version="", machineName="", physicalName="";
float mydbDataFileSizeGB=-1, maxSizeGB=-1;

try {
    using SqlConnection con = new SqlConnection(conString);
    con.Open();
    var query = @"
        SELECT  
            @@VERSION AS Version, 
            SERVERPROPERTY('MachineName') AS MachineName, 
            physical_name AS PhysicalName,
            CAST(CASE WHEN type = 0 THEN size * 8. / 1024.0  / 1024.0 ELSE 0 END AS DECIMAL(8,2)) AS MydbDataFileSizeGB,
            CAST(CASE WHEN serverproperty('EngineEdition') = 4 THEN  CASE WHEN SERVERPROPERTY('productversion') between '10.50' and '5' THEN 10 ELSE 4 END ELSE -1 END  AS DECIMAL(8,2)) AS MaxSizeGB
        FROM sys.master_files
        WHERE name = 'Mydb_Data'
    ";

    using SqlCommand cmd = new SqlCommand(query, con);
    SqlDataReader rdr = cmd.ExecuteReader();

    if (rdr.Read()) {
        version = rdr.GetString(0);
        machineName = rdr.GetString(1);
        physicalName = rdr.GetString(2);
        mydbDataFileSizeGB = decimal.ToSingle(rdr.GetDecimal(3));
        maxSizeGB = decimal.ToSingle(rdr.GetDecimal(4));
    }

} catch (Exception) {
    ...
}

要在EFCore 3.1中实现这一点,您需要创建一个表示您试图检索的数据的模型,然后使用FromSqlRaw或FromSqlInterpolated填充该模型

您需要使用DbContext来完成此操作。因此,如果这是您的硬需求,那么像您所做的那样求助于ADO.NET是一种方法

ExecuteSqlRaw/ExecuteSqlInterpolated将仅返回整数结果