【问题标题】:Dynamically built LINQ to SQL query without Entity classes没有实体类的动态构建的 LINQ to SQL 查询
【发布时间】:2011-03-15 22:14:55
【问题描述】:

LINQ2SQL 相当不错。易于构建和使用实体类。

但是如果我在编译时对数据库和表一无所知怎么办?

但我需要查询“FooDb”中的“Foo”表;

我可以在没有任何实体类的情况下对数据库运行 Linq 查询吗?

你能给我举个例子吗?

【问题讨论】:

    标签: sql-server linq-to-sql c#-4.0


    【解决方案1】:

    Linq2Sql 是一个 ORM - 一个 Object Relational Mapper

    因此,在编译您的应用程序之前,它需要知道数据库结构以便生成可以与之交互的类。

    简而言之,使用 Linq2Sql 或我知道的任何其他 ORM 都无法实现您的要求。


    您可以创建一个应用程序来查询系统表并为您生成和加载类,但如果事先不知道结构,我不知道您将如何在代码中与它们交互。

    【讨论】:

    • 好的...它可以“即时”进行映射吗?
    • 我的意思是我可以动态构建一些类型。我可以吗?为什么我不能动态构建实体?
    • @Agzem - 你可能可以,但是,有什么意义呢?您的代码不会知道这些类,您需要围绕它们构建基础架构才能开始使用它们。
    【解决方案2】:

    必须在某处编译实体才能使 LINQ to SQL 工作。因此,拥有动态模型的唯一方法是构建动态程序集,就像 LINQPad 所做的那样。这是可能的,但工作量很大。此外,如果您不知道数据库是什么样子,您的 LINQ 查询会是什么样子?

    【讨论】:

      【解决方案3】:

      不,您不能动态或即时构建对象模型。

      做你想做的事情的唯一相关(非最佳、违反直觉和难以维护)的方法是:

      【讨论】:

        【解决方案4】:

        好的。 WebMatrix.Data 呢?

        如果您需要轻松访问数据库并且不想为打开连接、关闭等问题而烦恼。而且您的项目不需要强类型实体。

        这是 MVCConf 的 Jeffrey Palermo 展示的内容。这段代码是这样的:

        using WebMatrix.Data;
        
        ...
        
        public IEnumerable<dynamic> Execute(){
        
           Database db = Database.Open("EasyTimeTracking");
           var employees= db.Query("select FullName, Startdate, EndDate from Employee");
           return employees;
        
        }
        

        在 c# 中使用而不是使用旧的 SQL 方法是否值得?你怎么看?

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-12-21
          • 1970-01-01
          • 2013-10-01
          • 1970-01-01
          相关资源
          最近更新 更多