Entity framework EFcore3.1从sys.master_文件和SERVERPROPERTY获取值
我需要我的(控制台)应用程序来获取一些一般SQLserver数据库信息 在SQLserver management studio中,我在主系统数据库上运行以下查询: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
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将仅返回整数结果