【问题标题】:C# Entity Framework Core write raw SQL without modelC# Entity Framework Core 编写没有模型的原始 SQL
【发布时间】:2020-10-03 14:15:57
【问题描述】:

首先,我看过这个帖子:Raw SQL Query without DbSet - Entity Framework Core 但我觉得它没有回答我的问题。

我有一个带有 Entity Framework Core 的 ASP.NET Core MVC 项目(目前最新)。

我需要做的是:

public IActionResult MyView(string NameOfTable)
{
    // send model that is same as NameOfTable 
    // or
    // send something like List<string> that has properties and names of columns  
    return View();
}

我想要做的是调用一个函数并发送数据库中表的名称。它将在数据库中查找表并返回表的属性(列名、列类型[int/varchar..])。

我认为可行的方法是:将原始 SQL 写入数据库。

我认为是好的答案:一些关于如何在不知道模型的情况下编写原始 SQL 来查询数据库的 sn-p。或者某种克服这个问题的方法。

感谢一切。抱歉,这是个愚蠢的问题。

【问题讨论】:

  • 是的,抱歉,在我的时区凌晨 2 点,我很困,并且对我的代码中的这种复制感到非常恼火。我正在发布解决方案。
  • 我很困惑你为什么使用实体框架,但实际上并没有真正使用它。看起来有点奇怪,但我相信这是有原因的。为什么不直接使用 DbSet、创建迁移、应用它,然后在 EF 也希望您使用的上下文中使用它们?
  • 我在整个解决方案中正确使用它,所以我希望它是项目范围内的东西,我不想为一个控制器下载更多库

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


【解决方案1】:

很抱歉打扰大家。我找到了解决方案。这里是:

    public class AA
    {
        public string One { get; set; }
        public string Two { get; set; }
    }
private async Task pokus()
        {
           List<AA> groups = new List<AA>();
            var conn = _db.Database.GetDbConnection();
            try
            {
                await conn.OpenAsync();
                using (var command = conn.CreateCommand())
                {
                    string query = "SELECT * "
                        + "FROM TABLE";
                    command.CommandText = query;
                    DbDataReader reader = await command.ExecuteReaderAsync();

                    if (reader.HasRows)
                    {
                        while (await reader.ReadAsync())
                        {
                            try
                            {
                                var row = new AA { One = reader.GetString(1), Two = reader.GetString(2) };
                                groups.Add(row);
                            }
                            catch { }
                        }
                    }
                    else
                    {
                        Console.WriteLine("Dont have rows");
                    }
                    reader.Dispose();
                }
            }
            finally
            {
                conn.Close();
            }
            foreach(AA s in groups)
            {
                Console.WriteLine(s.One);
                Console.WriteLine(s.Two);
            }
}

希望对大家有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-28
    • 2017-12-27
    • 2020-11-27
    • 2017-01-10
    • 1970-01-01
    • 2022-06-10
    • 1970-01-01
    • 2017-10-19
    相关资源
    最近更新 更多