2009-07-08 32 views
1

是否可以像使用類型化數據集一樣輕鬆地在實體框架中導航實體?是否可以像使用類型化數據集一樣輕鬆地在實體框架中導航實體?

隨着類型化數據集從一個存儲過程加載多個表,然後簡單地使用類似的語句:

//get student’s course 
StudentsDS.Course drCourse = drStudent.CoursesRowParent; 

// get course students 
foreach (StudentsDS.StudentRow dr in ds.GetStudentsRows()) 
{ 
… 
} 

我有一個新的項目,如果陷入了EF趨勢必須決定或保持真實和測試。順便說一句,我讀了很多關於類型化數據集的批評,這些批評是錯誤的或誇大的。

對於新項目,我將使用ASP.Net MVC,因爲我相信它的優點。用EF ......不太確定。

回答

1

當然,你可以。很難從無到有,但我嘗試過。以下代碼將打印課程名稱中包含「算法」的「John Doe」第一課程中的所有學生的姓名。

using (ObjectContext context = new ObjectContext()) 
{ 
    foreach (Student student in context.Students 
     .First(student => student.Name == "John Doe") 
     .Courses 
     .First(course => course.Name.Contains("Algorithms") 
     .Students) 
    { 
     Console.WriteLine(student.Name); 
    } 
} 

如果你要訪問其他的關​​系,你必須明確地加載它們,或使用Include()方法。

using (ObjectContext context = new ObjectContext()) 
{ 
    foreach (Student student in context.Students.Include("Courses")) 
    { 
     foreach (Course course in student.Courses) 
     { 
      Console.WriteLine(student.Name + " " + course.Name); 
     } 
    } 
} 

或者使用顯式加載。

using (ObjectContext context = new ObjectContext()) 
{ 
    foreach (Student student in context.Students) 
    { 
     if (!student.Courses.IsLoaded) 
     { 
      student.Courses.Load(); 
     } 
     foreach (Course course in student.Courses) 
     { 
      Console.WriteLine(student.Name + " " + course.Name); 
     } 
    } 
} 
+0

感謝您的*快速*回答。我收到錯誤:ObjectContext不採取一個構造函數,它採用'0'參數。我想我會用ASP.net MVC(喜歡它!)開始新項目,並在側面使用EF的同時鍵入DataSets ...看起來,我認爲學習曲線更陡峭。 – user133464 2009-07-08 23:37:32

0

它看起來對我來說,這裏的基本參數是你是否認爲使用OR/M(對象關係映射器)是一個好主意或沒有和這樣的做法是否具有對類型化的DataSet方法,你有什麼優勢用於。根據我的經驗,使用OR/M對於我開發的任何需要持久性的應用程序來說都是至關重要的,因爲原因,請參閱this post by Glenn Block(他比我更好)。

1

訪問相關對象與鍵入數據集一樣容易。不過,您會發現在加載數據方面存在差異。你會發現最不同的部分是實體框架(以及Linq to Sql)不再強調使用存儲過程作爲填充數據集合的手段。它可能是,請注意,只是不像您以前使用的數據集那樣靈活。因此,從單個存儲過程調用中加載多個EntitySets(即DataTable等效項)在Entity Framework中並不真正有用,因爲沒有真正的DataAdapter等效項。也就是說,DanielBrückner上面的便捷示例將顯示,您可以非常輕鬆地在一次調用底層數據存儲區的過程中填充多個實體集。實際上,我發現在Entity Framework(和Linq to Sql)中比在強類型的DataSets中更容易。

+0

我想我必須改變數據從數據庫移動到GUI服務器的過程......在過去的項目中,我們加載了類型化的數據集並緩存了經常使用的數據集。在EF中我不清楚我怎樣才能避免一直打到數據庫。謝謝! – user133464 2009-07-08 23:32:28