打開 DataClasses1.designer.cs 可見完整映射代碼。關鍵部分摘要:
[Database(Name="northwind_may06ctp")]
public partial class DataClasses1DataContext : DataContext
{
// 靜態對應來源
private static MappingSource mappingSource = new AttributeMappingSource();
// 擴充方法定義(可 partial 實作商業邏輯)
partial void OnCreated();
partial void InsertOrder(Order instance);
partial void UpdateOrder(Order instance);
partial void DeleteOrder(Order instance);
// ... Order_Detail 同理
// 多載建構函式支援各種連線方式
public DataClasses1DataContext(string connection) : base(connection, mappingSource) { OnCreated(); }
public DataClasses1DataContext() : base(global::Settings.Default.northwindConnectionString, mappingSource) { OnCreated(); }
// 強型別 Table 屬性
public Table<Order> Orders { get { return GetTable<Order>(); } }
public Table<Order_Detail> Order_Details { get { return GetTable<Order_Detail>(); } }
// 對應預存程序的方法
[Function(Name="dbo.CategoriesInsert")]
public int CategoriesInsert([Parameter(DbType="int")] int? CategoryID, ...)
{
return ExecuteMethodCall(...).ReturnValue;
}
}
每個實體類別皆實作 INotifyPropertyChanging、INotifyPropertyChanged,支援雙向資料繫結。關鍵屬性:
Storage 指定私有欄位、DbType 對應資料庫型別、IsPrimaryKey、IsDbGenerated(Identity)、AutoSync。Name 關聯名稱、Storage 私有欄位、ThisKey/OtherKey 對應鍵欄位、IsForeignKey 標示外鍵端。attach/detach)。[Table(Name="dbo.Orders")]
public partial class Order : INotifyPropertyChanging, INotifyPropertyChanged
{
[Column(Storage="_OrderID", DbType="Int NOT NULL IDENTITY", IsPrimaryKey=true, IsDbGenerated=true)]
public int OrderID { get; set; }
[Association(Name="Order_Order_Detail", Storage="_Order_Details", OtherKey="OrderID")]
public EntitySet<Order_Detail> Order_Details { get; set; }
// ... 其他欄位與部分方法
}
[Table(Name="dbo.[Order Details]")]
public partial class Order_Detail : INotifyPropertyChanging, INotifyPropertyChanged
{
[Column(Storage="_OrderID", DbType="Int NOT NULL", IsPrimaryKey=true)]
public int OrderID { get; set; }
[Association(Name="Order_Order_Detail", Storage="_Order", ThisKey="OrderID", IsForeignKey=true)]
public Order Order { get; set; }
// ...
}