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

MiniORM 實戰測試代碼與 Bug 修復:驗證自定義 ORM 框架功能

     編輯:關於C#

針對 MiniORM 反饋的 Bug 及使用困惑,本文提供完整測試代碼、實體類定義、數據庫結構,並修復兩個關鍵 Bug。

Bug 修復

1. PubFuncs.GetObjectType() 緩存邏輯缺陷

public static Type GetObjectType(string asm, string ns, string cls) {
    Type objType = (Type)_HashObjectType[asm + ns + cls];
    if (objType == null) {
        object obj = Assembly.Load(asm).CreateInstance(ns + "." + cls);
        _HashObjectType[asm + ns + cls] = obj.GetType();
        // 修復:重新賦值 objType,否則返回 null
        objType = (Type)_HashObjectType[asm + ns + cls];
    }
    return objType;
}

2. OrmWriter.CheckValidate() 空 WHERE 條件導致 SQL 錯誤

public void CheckValidate(object ModelObject) {
    // ... 構建 strWHERE ...
    // 修復:執行前判斷 strWHERE 不為空
    if (strWHERE.Trim() != "") {
        strSQL = string.Format(strSQL, strTablename, strWHERE);
        // ... 執行查詢拋異常 ...
    }
}

測試場景:一對多、一對一關聯

實體類圖:類關系圖

數據庫表結構:

  • Person (ID PK, name, age, sex)
  • Hand (ID PK, PersonID FK, name)
  • Head (ID PK, PersonID FK, name)

實體類定義 (含特性映射)

[DataObjectAttribute("Person", "ID", "")]
public class Person {
    [DataFieldAttribute("ID", true)] public int ID { get; set; } // true=Identity
    [SubDataObjectAttribute(SubDataObjectFieldType.Object, "MiniORM", "MiniORM", "Head")]
    public Head Head { get; set; }
    [SubDataObjectAttribute(SubDataObjectFieldType.Object, "MiniORM", "MiniORM", "Hand")]
    public Hand LeftHand { get; set; }
    [SubDataObjectAttribute(SubDataObjectFieldType.Object, "MiniORM", "MiniORM", "Hand")]
    public Hand RightHand { get; set; }
    [DataFieldAttribute("name", "NvarChar")] public string Name { get; set; }
    [DataFieldAttribute("age", "int")] public int Age { get; set; }
    [DataFieldAttribute("sex", "NvarChar")] public string Sex { get; set; }
}

[DataObjectAttribute("Hand", "ID", "PersonID")]
public class Hand {
    [DataFieldAttribute("ID", true)] public int ID { get; set; }
    [DataFieldAttribute("PersonID")] public int PersonID { get; set; }
    [DataFieldAttribute("name", "NvarChar")] public string Name { get; set; }
}

[DataObjectAttribute("Head", "ID", "PersonID")]
public class Head {
    [DataFieldAttribute("ID", true)] public int ID { get; set; }
    [DataFieldAttribute("PersonID")] public int PersonID { get; set; }
    [DataFieldAttribute("name", "NvarChar")] public string Name { get; set; }
}

測試代碼

[STAThread]
static void Main() {
    WriteTest(); // 插入測試
    ReadTest();  // 讀取驗證
}

static void WriteTest() {
    Person p = new Person { Name = "snoopy", Age = 5, Sex = "male" };
    p.LeftHand = new Hand { Name = "左手" };
    p.RightHand = new Hand { Name = "右手" };
    p.Head = new Head { Name = "大笨腦袋" };
    new OrmWriter().Write(p);
}

static void ReadTest() {
    Person p = (Person)new OrmReader().Read(new Person(), 1);
    Console.WriteLine($"Name:{p.Name}, Age:{p.Age}, Sex:{p.Sex}");
    Console.WriteLine($"LeftHand:{p.LeftHand.Name}, RightHand:{p.RightHand.Name}, Head:{p.Head.Name}");
    Console.Read();
}

測試結果

控制台輸出

輸出正確顯示 Person 及其關聯的 LeftHand、RightHand、Head 屬性,驗證 MiniORM 級聯寫入/讀取功能正常。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved