2009-02-25 158 views
2

我正在閱讀關於LINQ的WROX書籍,並且作者正在對數據庫執行LINQ。基本上他正在訪問數據庫作爲一個對象,如下面的代碼所示。用LINQ查詢數據庫的最快方法是什麼?

但我沒有看到他希望如何「作爲對象訪問數據庫」,即使下載的代碼在「db.DirectoryInformation」上說「DirectoryInformation」未知,也會出現錯誤。

我錯過了什麼?我想我首先需要創建LINQ-to-SQL類或ADO.NET EDM,或者甚至有更直接的方法將LINQ綁定到數據庫,即通過創建數據庫類並從DataContext繼承?

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,第一章,LINQ.sln。

回答

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

哦,絕對可以在LINQ-to-SQL中使用vanilla對象;你甚至不需要子類DataContext - 但你需要告訴它關於你的模型。這通常通過成員(用於列)和類型(用於表)的屬性來完成,但也可以通過外部映射文件(xml)來完成。我不知道他們是否只是過縮寫爲簡單起見...例如,我懷疑這個表應該是一個屬性:

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

全「的dbml」的事情就在那裏,作爲一個設計師的工具來幫助你生成類;重要的代碼只是裝飾類(與一些像導航屬性的東西,使生活simper使用)。這就是說,「最快」:使用設計師。

+0

(感謝,我發佈了上面的完整代碼的鏈接,如果你想看看它),所以我只是做了一個.sdf數據庫,我想用LINQ訪問它,什麼是最快的方法? – 2009-02-25 11:27:20

+0

「最快」:使用設計器和/或SqlMetal爲你做繁重的工作...... – 2009-02-25 11:29:28

相關問題