我首先使用带有SQL Server 2017的数据库的EF Core 2.0,它适用于我的表和视图。但是,我有一个问题是映射我在数据库中的现有函数。
功能:(示例)
CREATE FUNCTION [DBO].[GETDATETIME]()
RETURNS DateTime
AS
BEGIN
RETURN (SELECT GETDATE())
END
SQL查询:
SELECT GETDATETIME()
问题:
我想以与SQL查询相同的方式(或类似方式)调用我的函数。
我在一些例子中找到了以下方法:
1 - 在我的XDbContext类中创建静态方法:
[DbFunction("dbo.GetDateTime")]
public static DateTime GetDateTime()
{
throw new Exception();
}
2 - 在与另一个表的关系中调用您的函数:
from t in _dbContext.Customer
select new { period = XDbContext.GetDateTime() };
但是我需要以独立的方式使用该函数,因为我们可以在SQL查询中使用它。
我非常感谢任何帮助或有用的提示。
答案 0 :(得分:0)
阅读EF Core文档我发现了一种方法可以按照我的意愿去做。似乎无法直接从dbcontext映射函数,但EF为您提供连接,您可以将其用作ADO.NET读取器。因此,在XDbContext中创建函数我可以用最简单的方式使用它。
public class XDbContext : DbContext
{
//MAPPED OBJECTS
//....
//....
public XDbContext(DbContextOptions<XDbContext> options)
: base(options) { }
public string f_MyFunction()
{
var fResult = "";
var conn = this.Database.GetDbConnection();
conn.Open();
using (var cmd = conn.CreateCommand())
{
string query = "SELECT DBO.MyFunction()";
cmd.CommandText = query;
DbDataReader reader = cmd.ExecuteReader();
if (reader.HasRows)
{
reader.Read();
fResult = reader.GetString(0);
}
}
return fResult ;
}
}
[这只是一个测试,我将以更好的方式实现这些功能!]
如果有人有更好的选择,请告诉我。我非常感谢能够更多地了解EF Core的可能性。