【问题标题】:Entity Framework get sysdate from DUAL of Oracle实体框架从 Oracle 的 DUAL 获取 sysdate
【发布时间】:2021-12-17 01:11:11
【问题描述】:

从 Oracle 的“DUAL”获取 SYSDATE 的最佳方法是什么?

我尝试使用 ExecuteSqlRawAsync 但我也需要返回值。

public async Task<DateTime> GetTime()
{
  // This does not return value and does not work
  await _dbContext.Database.ExecuteSqlRawAsync("Select sysdate from dual;");
}

另一种方法是创建一个modelbuilder之类的。

public partial class Dual 
{
  public DateTime SysDate { get; set; }
}

public virtual DbSet<Dual> Dual { get; set; }

modelBuilder.Entity<Dual>(e => { ... });

并使用查询。

await _dbContext.Dual.FromSqlRaw("Select sysdate from dual;").ToListAsync();

是否有任何更简单或更好的方法可以从 Oracle 获取“SYSDATE”?我使用的是 EF Core 版本 5。

【问题讨论】:

  • _dbContext.Database.SqlQuery&lt;string&gt;("Select sysdate from dual") .FirstOrDefault();
  • 此方法不适用于 EF 3 及更高版本。
  • Docs-Entity Framework-Entity Framework 6-查询数据-使用原始SQL查询docs.microsoft.com/en-us/ef/ef6/querying/raw-sqlcontext.Database.SqlQuery&lt;string&gt;
  • _dbContext,Database是DatabaseFacade,所以SqlQuery方法不可用。

标签: c# .net entity-framework-core


【解决方案1】:

你可以试试这个帖子里提到的解决方案:

Entity Framework 7: get database time

public async Task<DateTime> GetTime()
{
    DbConnection connection = _dbContext.Database.GetDbConnection();
    if (connection.State == ConnectionState.Closed)
    {
        await connection.OpenAsync();
    }

    var command = connection.CreateCommand();
    command.CommandText = "select sysdate from dual";
    return (DateTime) await command.ExecuteScalarAsync();
}

【讨论】:

  • 谢谢。不确定是否还有其他更好的方法,但这个也可以。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多