首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 3.0 入門系列(七):O/R 設計工具生成代碼深度解析(下)

     編輯:關於C語言

生成的 DataClasses1DataContext 核心結構

打開 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;
    }
}

實體類別:Order 與 Order_Detail 完整映射

每個實體類別皆實作 INotifyPropertyChanging、INotifyPropertyChanged,支援雙向資料繫結。關鍵屬性:

  • Column 屬性:Storage 指定私有欄位、DbType 對應資料庫型別、IsPrimaryKey、IsDbGenerated(Identity)、AutoSync。
  • Association 屬性:Name 關聯名稱、Storage 私有欄位、ThisKey/OtherKey 對應鍵欄位、IsForeignKey 標示外鍵端。
  • EntitySet<T> / EntityRef<T>:分別代表一對多的集合端與多對一的參考端,內建變更追蹤邏輯(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; }
    // ...
}

工具選擇建議

  • O/R Designer:適合需設計類別繼承、視覺化維護關聯、中小型專案。
  • SqlMetal:適合大型資料庫一次性生成、自動化建置腳本、需外部對應檔、支援 SQL CE。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved