LINQ TO SQL (一):1. 对象关系设计器(O/R 设计器)
對象關系設計器(O/R 設計器)的作用:
1.?提供了一個可視化設計圖面,用于創(chuàng)建基于數(shù)據(jù)庫中對象的?LINQ to SQL?實體類和關系;創(chuàng)建映射到數(shù)據(jù)庫中的對象的對象模型。
2.?生成一個強類型?DataContext,用于在實體類與數(shù)據(jù)庫之間發(fā)送和接收數(shù)據(jù)。
3. 可以將存儲過程和函數(shù)映射到?DataContext?方法以便返回數(shù)據(jù)和填充實體類。
4.?提供了對實體類之間的繼承關系進行設計的能力。
?
對象關系設計器(O/R 設計器)是什么?
—— 是個?LINQ to SQL 類和數(shù)據(jù)庫對象之間提供映射的 XX.dbml 文件,這個文件里有什么呢?——類型化的?DataContext?和實體類。
——?有兩個不同的區(qū)域:左側的實體窗格和右側的方法窗格。
?
打開 O/R 設計器
1.?在項目中添加新的“LINQ to SQL 類”項
2. 說明:?
? a. O/R 設計器是一個簡單的對象關系映射器,因為它僅支持 1:1 映射關系,
b. 是一個單向代碼生成器,這表示代碼文件中只反映對設計器圖面所做的更改,O/R 設計器中不會反映對代碼文件的手動更改。
c.?在保存設計器并重新生成代碼時,將覆蓋在代碼文件中手動進行的所有更改
?
創(chuàng)建和配置 DataContext
在向項目中添加“LINQ to SQL 類”項并打開 O/R 設計器后,空設計圖面表示一個可供配置的空?DataContext。DataContext?是使用拖動到設計圖面上的第一項所提供的連接信息進行配置的.
1.?DataContext?類是一個 LINQ to SQL 類,它充當 SQL Server 數(shù)據(jù)庫與映射到該數(shù)據(jù)庫的 LINQ to SQL 實體類之間的管道,DataContext?類包含用于連接數(shù)據(jù)庫以及操作數(shù)據(jù)庫數(shù)據(jù)的連接字符串信息和方法。
?
創(chuàng)建映射到數(shù)據(jù)庫表和視圖的實體類
1.?Entity?映射到數(shù)據(jù)庫表和視圖的 LINQ to SQL 類稱為“實體類”。實體類映射到記錄,而實體類的各個屬性則映射到構成一條記錄的各個列
2.?實體類與數(shù)據(jù)庫表或視圖之間只能具有 1:1 映射關系。不支持復雜映射(例如,將一個實體類映射到多個表)。但是,可以將一個實體類映射到一個聯(lián)接多個相關表的視圖。
3.?通過將表或視圖從“服務器資源管理器”/“數(shù)據(jù)庫資源管理器”拖動到 O/R 設計器上,除了可以創(chuàng)建用于執(zhí)行更新的?DataContext?方法以外,還可以創(chuàng)建實體類。
LINQ to SQL 對象模型? :
1.?在 LINQ to SQL 中,用開發(fā)人員所用的編程語言表示的對象模型映射到關系數(shù)據(jù)庫的數(shù)據(jù)模型。然后就會按照對象模型來執(zhí)行對數(shù)據(jù)的操作。
下表概括了 LINQ to SQL 對象模型中最基本的元素及其與關系數(shù)據(jù)模型中的元素的關系:
LINQ to SQL 實體類與數(shù)據(jù)庫表 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??? ? (基于屬性的映射 (LINQ to SQL))
在 LINQ to SQL 中,數(shù)據(jù)庫表由實體類表示。實體類與您可能創(chuàng)建的任何其他類相似,只不過對實體類進行批注的方法是使用將該類與數(shù)據(jù)庫表關聯(lián)的特殊信息。您需通過向類聲明中添加自定義屬性 (TableAttribute) 來進行這種批注,如下面的示例所示:LINQ to SQL 僅支持單表映射關系即,實體類必須只映射到一個數(shù)據(jù)庫表,且無法同時將數(shù)據(jù)庫表映射到多個類。
您可以使用?TableAttribute?屬性 (Attribute) 的?Name?屬性 (Property) 來指定表名稱,并可以選擇使用架構名稱來限定表名稱。如果您未使用?Name?屬性指定名稱,則假定表名稱與類名相同。
?
[Table(Name = "Customers")]
public class Customerzz
{
public string CustomerID;
// ...
public string City;
}
只有聲明為表的類(即實體類)的實例才能保存到數(shù)據(jù)庫中。
LINQ to SQL 類成員與數(shù)據(jù)庫列
除了將類與表關聯(lián)以外,您還需指定字段或?qū)傩詠肀硎緮?shù)據(jù)庫列。為此,LINQ to SQL 定義了?ColumnAttribute?屬性,如下面的示例所示:
?
[Table(Name = "Customers")]
public class Customer
{
[Column(IsPrimaryKey = true)]
public string CustomerID;
[Column]
public string City;
}
?
只有映射到列的字段和屬性才能持久保存到數(shù)據(jù)庫中,從數(shù)據(jù)庫中也只能檢索這樣的字段和屬性。那些未聲明為列的字段和屬性被視為應用程序邏輯的瞬態(tài)部分。
LINQ to SQL 關聯(lián)與數(shù)據(jù)庫外鍵關系
在 LINQ to SQL 中,數(shù)據(jù)庫關聯(lián)(如外鍵到主鍵關系)是通過應用?AssociationAttribute?屬性表示的。在下面的代碼段中,Order?類包含具有?AssociationAttribute?屬性 (Attribute) 的?Customer?屬性 (Property)。此屬性 (Property) 及其屬性 (Attribute) 為?Order?類提供了與?Customer?類的關系。
下面的代碼示例顯示了?Order?類中的?Customer?屬性 (Property)。
?
[Association(Name="FK_Orders_Customers", Storage="_Customer", ThisKey="CustomerID", IsForeignKey=true)]
public Customer Customer
{
get
{
return this._Customer.Entity;
}
set
{
Customer previousValue = this._Customer.Entity;
if (((previousValue != value)
|| (this._Customer.HasLoadedOrAssignedValue == false)))
{
this.SendPropertyChanging();
if ((previousValue != null))
{
this._Customer.Entity = null;
previousValue.Orders.Remove(this);
}
this._Customer.Entity = value;
if ((value != null))
{
value.Orders.Add(this);
this._CustomerID = value.CustomerID;
}
else
{
this._CustomerID = default(string);
}
this.SendPropertyChanged("Customer");
}
}
}
總結
以上是生活随笔為你收集整理的LINQ TO SQL (一):1. 对象关系设计器(O/R 设计器)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 排序集锦(各种排序算法的特点及性能分析)
- 下一篇: linux cmake编译源码,linu