繁体   English   中英

有没有一种方法可以使用Entity Framework获取C#中所有存储过程名称的列表?

[英]Is there a way to get a List of all stored procedure names in C# using Entity Framework?

我知道可以从打开的数据库连接中运行:

SELECT * FROM SYS.PROCEDURES

有没有办法做到与EF 6.1相同的效果?

您可以直接从数据库上下文对象运行原始sql语句。

SomeDatabaseEntities db = new ...();

var items = db.Database.SqlQuery<Something>("SELECT * FROM SYS.PROCEDURES")

您将需要创建一个名为Something的类来映射结果。 应该与属性名称匹配一样容易。

从方法的文档中:

该类型可以是具有与查询返回的列名相匹配的属性的任何类型,也可以是简单的原始类型。

看起来您可以使用代码优先的方式手动映射该表并将其像其他任何实体一样对待:

[Table("procedures", Schema = "sys")]
public class Procedure
{
    [Column(Order = 0)]
    public string name { get; set; }

    [Key]
    [Column(Order = 1)]
    public int object_id { get; set; }
}

public partial class Model1 : DbContext
{
    public Model1()
        : base("name=Model1")
    {
    }

    public virtual DbSet<Procedure> Procedures { get; set; }
}


using (var context = new Model1())
{
    foreach (var p in context.Procedures)
    {
        Console.WriteLine("{0}: {1}", p.object_id, p.name);
    }
}

由于首先使用数据库,因此可以在系统视图周围包装常规视图,然后将实体映射到该视图:

create view dbo.procs
as
select * from sys.procedures;

在dbo中,您拥有传统的观点,因此EF应该不会遇到任何麻烦。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM