一隻大菜鳥,最近要學習windows phone資料庫相關的知識,找到了一些比較簡短的教程進行學習,由於是英文的,順便給翻譯了。本身英語水平就不好,估計文中有不少錯誤,如果有不幸讀到的童鞋請保持對翻譯品質的質疑,多多指教。
這是原文地址:http://windowsphonegeek.com/tips/Windows-Phone-Mango-Local-Database-SQL-CE--Association-attribute
本文如下:
這是“windows phone mango本機資料庫(sqlce)”系列短片文章的第五篇。 為了讓你開始在Windows Phone Mango中使用資料庫,這一系列短片文章將覆蓋所有你需要知道的知識點。 我將談談在windows phone mango本機資料庫時使用[Association] attribute。
首先、要說到的是,windows phone 7.1上的資料庫功能是SQL Compact關於Mango的一個實現。你將使用linq to sql訪問儲存在資料庫上的資料。
1、 [Association] attribute 是什麼 在LINQ to SQL中實體類之間的關聯類別似於在資料庫中表之間的關聯。 [Association] attribute用於指定在資料庫中的一個屬性來表示關聯。例如一個外鍵到主鍵的關係。你也可以表示一對一或多對多的關係。
- 一對一:在關聯的兩端使用包含屬性的EntitySet<TEntity>類型表示這種關係。
- 多對多:在多對多關係中,鏈表(也叫連接表)的主鍵,通常形成其他兩個表複合的一個外鍵。
參考:你可以查看這裡:http://msdn.microsoft.com/zh-cn/library/system.data.linq.mapping.associationattribute.aspx 2、怎麼使用[Association] attribute 關聯指定使用
[Association] attribute,這允許你在資料庫映射中兩個類型間配置關係。 [Association] attribute有下面幾個重要屬性:
- OtherKey-屬性的名稱對應關聯的另一端對象的id(擷取或設定在關聯的另一端上作為索引值的、目標實體類的一個或多個成員)
- ThisKey-對於這種類型,屬性的名字與外鍵相對應(擷取或設定表示關聯的此端上的索引值的此實體類成員)
- Storage-這屬性支援變數(擷取或設定用來儲存列中的值的私人儲存欄位。)
注釋:括弧內是MSDN上面的解釋 一對多複合關聯 樣本1:
1 [Table] 2 public class Country 3 { 4 ... 5 6 private EntitySet<City> citiesRef; 7 8 [Association(Name = "FK_Country_Cities", Storage = "citiesRef", ThisKey = "ID", OtherKey = "CountryID")] 9 public EntitySet<City> Cities10 {11 get12 {13 return this.citiesRef;14 }15 }16 ...17 18 }
注釋:在上面的程式碼片段中,citiesRef 支援EntitySet<City>類型的變數,因為citiesRef 是“一對多”關聯的“多”這一邊的。
樣本2:
1 [Table] 2 public class City 3 { 4 //... 5 6 private EntityRef<Country> countryRef = new EntityRef<Country>(); 7 8 9 [Association(Name = "FK_Country_Cities", Storage = "countryRef", ThisKey = "CountryID", OtherKey = "ID", IsForeignKey = true)]10 public Country Country11 {12 get13 {14 return this.countryRef.Entity;15 }16 set17 {18 Country previousValue = this.countryRef.Entity;19 if (((previousValue != value) || (this.countryRef.HasLoadedOrAssignedValue == false)))20 {21 if ((previousValue != null))22 {23 this.countryRef.Entity = null;24 previousValue.Cities.Remove(this);25 }26 this.countryRef.Entity = value;27 if ((value != null))28 {29 value.Cities.Add(this);30 this.countryID = value.ID;31 }32 else33 {34 this.countryID = default(Nullable<int>);35 }36 }37 }38 }39 //...40 41 }
注釋:在上面的程式碼片段中,countryRef 支援EntityRef<Country>類型的變數,因為citiesRef 是“一對多”關聯的“一”這一邊的。
你也可以參考這裡http://www.windowsphonegeek.com/articles/Windows-Phone-Mango-Local-Database-mapping-and-database-operations
這篇文章我談了有關在windows phone mango本機資料庫中使用[Association] attribute。請繼續關注接下來的文章。