LINQ to SQL語句(25)之繼承

作者: 李永京  來源: 博客園  發布時間: 2008-09-18 18:43  閱讀: 8095 次  推薦: 0   原文鏈接   [收藏]  
 
摘要:這個系列的最后一篇,講解繼承,我們要衷心地感謝博客園和作者提供了這么完整的參考資料。
[1] 繼承基礎
[2] 繼承實例

系列文章導航:

LINQ to SQL語句(1)之Where

LINQ to SQL語句(2)之Select/Distinct

LINQ to SQL語句(3)之Count/Sum/Min/Max/Avg

LINQ to SQL語句(4)之Join

LINQ to SQL語句(5)之Order By

LINQ to SQL語句(6)之Group By/Having

LINQ to SQL語句(7)之Exists/In/Any/All/Contains

LINQ to SQL語句(8)之Concat/Union/Intersect/Except

LINQ to SQL語句(9)之Top/Bottom和Paging和SqlMethods

LINQ to SQL語句(10)之Insert

LINQ to SQL語句(11)之Update

LINQ to SQL語句(12)之Delete和使用Attach

LINQ to SQL語句(13)之開放式并發控制和事務

LINQ to SQL語句(14)之Null語義和DateTime

LINQ to SQL語句(15)之String

LINQ to SQL語句(16)之對象標識

LINQ to SQL語句(17)之對象加載

LINQ to SQL語句(18)之運算符轉換

LINQ to SQL語句(19)之ADO.NET與LINQ to SQL

LINQ to SQL語句(20)之存儲過程

LINQ to SQL語句(21)之用戶定義函數

LINQ to SQL語句(22)之DataContext

LINQ to SQL語句(23)之動態查詢

LINQ to SQL語句(24)之視圖

LINQ to SQL語句(25)之繼承

LINQ簡介

adsfsaf

 

繼承支持

LINQ to SQL 支持單表映射,其整個繼承層次結構存儲在單個數據庫表中。該表包含整個層次結構的所有可能數據列的平展聯合。(聯合是將兩個表組合成一個表的結果,組合后的表包含任一原始表中存在的行。)每行中不適用于該行所表示的實例類型的列為 null。
單表映射策略是最簡單的繼承表示形式,為許多不同類別的查詢提供了良好的性能特征,如果我們要在 LINQ to SQL 中實現這種映射,必須在繼承層次結構的根類中指定屬性 (Attribute) 和屬性 (Attribute) 的屬性 (Property)。我們還可以使用O/R設計器來映射繼承層次結構,它自動生成了代碼。

下面為了演示下面的幾個例子,我們在O/R設計器內設計如下圖所示的類及其繼承關系。

繼承

我們學習的時候還是看看其生成的代碼吧!

具體設置映射繼承層次結構有如下幾步:

  1. 根類添加TableAttribute屬性。
  2. 為層次結構中的每個類添加InheritanceMappingAttribute屬性,同樣是添加到根類中。每個 InheritanceMappingAttribute屬性,定義一個Code屬性和一個Type屬性。Code屬性的值顯示在數據庫表的IsDiscriminator列中,用來指示該行數據所屬的類或子類。Type屬性值指定鍵值所表示的類或子類。
  3. 僅在其中一個InheritanceMappingAttribute屬性上,添加一個IsDefault屬性用來在數據庫表中的鑒別器值在繼承映射中不與任何Code值匹配時指定回退映射。
  4. 為ColumnAttribute屬性添加一個IsDiscriminator屬性來表示這是保存Code值的列。

下面是這張圖生成的代碼的框架(由于生成的代碼太多,我刪除了很多“枝葉”,僅僅保留了主要的框架用于指出其實質的東西):

[Table(Name = "dbo.Contacts")]
[InheritanceMapping(Code = "Unknown", Type = typeof(Contact),
                    IsDefault = true)]
[InheritanceMapping(Code = "Employee", Type = typeof(EmployeeContact))]
[InheritanceMapping(Code = "Supplier", Type = typeof(SupplierContact))]
[InheritanceMapping(Code = "Customer", Type = typeof(CustomerContact))]
[InheritanceMapping(Code = "Shipper", Type = typeof(ShipperContact))]
public partial class Contact :
INotifyPropertyChanging, INotifyPropertyChanged
{
    [Column(Storage = "_ContactID",IsPrimaryKey = true, 
    IsDbGenerated = true)]
    public int ContactID{ }
    [Column(Storage = "_ContactType",IsDiscriminator = true)]
    public string ContactType{ }
}
public abstract partial class FullContact : Contact{ }
public partial class EmployeeContact : FullContact{ }
public partial class SupplierContact : FullContact{ }
public partial class CustomerContact : FullContact{ }
public partial class ShipperContact : Contact{ }
[第1頁][第2頁]
0
0
 
標簽:LINQ LINQ to SQL
 
 

文章列表

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()