使用LINQ查询数据库的最快方法是什么?

时间:2009-02-25 11:10:26

标签: c# linq

我正在阅读关于LINQ的WROX书,作者正在数据库上执行LINQ。基本上他是作为对象访问数据库,如下面的代码所示。

但我不知道他希望“将数据库作为对象访问”,即使下载的代码在“db.DirectoryInformation”上收到错误,说“DirectoryInformation”未知。

我错过了什么?我认为我首先需要创建LINQ-to-SQL类或ADO.NET EDM,或者是否有更直接的方法将LINQ挂接到数据库,即仅通过创建数据库类并继承自DataContext? / p>

AdventureWorks db = new AdventureWorks("Integrated Security=sspi");

...

    [Database(Name = "AdventureWorks")]
    public class AdventureWorks : DataContext
    {
        //public Table<DirInfo> DirectoryInformation;
        public AdventureWorks(string connection) : base(connection) { }
        public Table<DirectoryInformation> DirectoryInformation;
    }

你可以download the whole code here,第1章,LINQ.sln。

2 个答案:

答案 0 :(得分:2)

查看Form1.cs源文件的结尾,使用属性声明LINQ to SQL数据库:

[Database(Name = "AdventureWorks")]
public class AdventureWorks : DataContext
{
    //public Table<DirInfo> DirectoryInformation;
    public AdventureWorks(string connection) : base(connection) { }
    public Table<DirectoryInformation> DirectoryInformation;
}

[Table(Name = "DirectoryInformation")]
public class DirectoryInformation
{
    [Column(DbType="varchar(50)")]
    public string DirectoryName;

    [Column(DbType = "varchar(255)")]
    public string DirectoryDescription;
}

通过项目提供设置定义连接字符串,这就是将DirectoryInformation类型简单映射到AdventureWorks数据库中的DirectoryInformation表所需的全部内容。

答案 1 :(得分:1)

哦,绝对可以使用带有LINQ-to-SQL的vanilla对象;你甚至不需要继承DataContext - 但你需要告诉它你的模型。这通常使用成员(对于列)和类型(对于表)的属性来完成,但也可以使用外部映射文件(xml)来完成。我想知道它们是否只是为了简单而过分缩略......例如,我怀疑该表应该是一个属性:

public Table<DirectoryInformation> DirectoryInformation {
    get { return GetTable<DirectoryInformation>(); }
}

整个“dbml”就是一个设计工具,可以帮助你生成类;重要的代码就是decoracted类(在导航属性等方面有一些约定,可以让生活变得简单易用)。也就是说,“最快”:使用设计师。