Code First 時 應該對 "多" 的屬性設置一個 List < >
因為在runtime 時 VS2013會繼承你的 Class 然後 override 所有 virtual 的程式碼 ,以達到"Lazy Load"和"change tracking"的效果
(註:Lazy Load是可以將還沒要用到的資料等要用到時再載入
change tracking則是讓系統可以知道相關的資料哪些被改變了)
這裡以 一 (Genre) 對上 多(Album)來舉例:
(也就是一個Genre裡會有很多Album)
public class Genre
{
[ Key]
public int GenreId { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public virtual List< Album> Albums { get; set; }
或: public List <Album > Albums { get; set; }
}
而有沒有加 virtual 的在Coding時差別如下:
假設今天要撈出Genre.Name屬性為"genre"的Album
- 有加 virtual
var genreModel = storeDB.Genres.Single(g => g.Name == "genre");
- 不加 virtual 在使用linq 語法時,應該要用Include( "Albums")方法才能將底下的albums集合一起撈出來
var genreModel = storeDB.Genres.Include( "Albums")
.Single(g => g.Name == "genre");
也就是有virtual的 storeDB.Genres = 沒有virtual時的 storeDB.Genres.Include( "Albums")
今天介紹就到這裡了,希望能幫助到有這個疑問的朋友!
沒有留言:
張貼留言