【发布时间】:2011-03-15 22:14:55
【问题描述】:
LINQ2SQL 相当不错。易于构建和使用实体类。
但是如果我在编译时对数据库和表一无所知怎么办?
但我需要查询“FooDb”中的“Foo”表;
我可以在没有任何实体类的情况下对数据库运行 Linq 查询吗?
你能给我举个例子吗?
【问题讨论】:
标签: sql-server linq-to-sql c#-4.0
LINQ2SQL 相当不错。易于构建和使用实体类。
但是如果我在编译时对数据库和表一无所知怎么办?
但我需要查询“FooDb”中的“Foo”表;
我可以在没有任何实体类的情况下对数据库运行 Linq 查询吗?
你能给我举个例子吗?
【问题讨论】:
标签: sql-server linq-to-sql c#-4.0
Linq2Sql 是一个 ORM - 一个 Object Relational Mapper。
因此,在编译您的应用程序之前,它需要知道数据库结构以便生成可以与之交互的类。
简而言之,使用 Linq2Sql 或我知道的任何其他 ORM 都无法实现您的要求。
您可以创建一个应用程序来查询系统表并为您生成和加载类,但如果事先不知道结构,我不知道您将如何在代码中与它们交互。
【讨论】:
必须在某处编译实体才能使 LINQ to SQL 工作。因此,拥有动态模型的唯一方法是构建动态程序集,就像 LINQPad 所做的那样。这是可能的,但工作量很大。此外,如果您不知道数据库是什么样子,您的 LINQ 查询会是什么样子?
【讨论】:
不,您不能动态或即时构建对象模型。
做你想做的事情的唯一相关(非最佳、违反直觉和难以维护)的方法是:
SELECT ID FROM Foo;
DataContext.ExecuteCommand() 执行该语句
【讨论】:
好的。 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 方法是否值得?你怎么看?
【讨论】: