2011-11-09 102 views
0

當我想到這個東西時,我正在爲我的應用程序創建對象。我知道使用DBML的手工創建類(見下面的類)可以提高我的應用程序開發的速度,但我真的很困惑,使用DBML的其他缺點和優點,比手動創建類,感謝所有願意幫助的人。 :)手動創建類與Vs. DBML

[Serializable] 
public class Building 
{ 
    public Building() 
    { 
     LastEditDate = DateTime.Now.Date; 
     LastEditUser = GlobalData.CurrentUser.FirstName + " " + GlobalData.CurrentUser.LastName; 
    } 

    public int BuildingID { get; set; } 
    public string BuildingName { get; set; } 
    public bool IsActive { get; set; } 
    public DateTime LastEditDate { get; set; } 
    public string LastEditUser { get; set; } 

    public static bool CheckIfBuildingNameExists(string buildingName, int buildingID = 0) 
    { 
     return BuildingsDA.CheckIfBuildingNameExists(buildingName, buildingID); 
    } 

    public static Building CreateTwin(Building building) 
    { 
     return CloningUtility.DeepCloner.CreateDeepClone(building); 
    } 

    public static List<Building> GetBuildingList() 
    { 
     return BuildingsDA.GetBuildingList(); 
    } 

    public static List<Building> GetBuildingList(bool flag) 
    { 
     return BuildingsDA.GetBuildingList(flag).ToList(); 
    } 

    public static Building SelectBuildingRecord(int buildingId) 
    { 
     return BuildingsDA.SelectBuilding(buildingId); 
    } 

    public static void InsertBuildingRecord(Building building) 
    { 
     BuildingsDA.InsertBuilding(building); 
    } 

    public static void UpdateBuildingRecord(Building building) 
    { 
     BuildingsDA.UpdateBuilding(building); 
    } 

    public static void DeleteBuildingRecord(int building) 
    { 
     BuildingsDA.DeleteBuilding(building); 
    } 
} 

和我的DAL是這樣的:

internal static class BuildingsDA 
{ 
    internal static Building SelectBuilding(int buildingId) 
    { 
     SqlCommand commBuildingSelector = ConnectionManager.MainConnection.CreateCommand(); 
     commBuildingSelector.CommandType = CommandType.StoredProcedure; 
     commBuildingSelector.CommandText = "Rooms.asp_RMS_Building_Select"; 
     commBuildingSelector.Parameters.AddWithValue("BuildingID", buildingId); 

     SqlDataReader dreadBuilding = commBuildingSelector.ExecuteReader(); 
     if (dreadBuilding.HasRows) 
     { 
      dreadBuilding.Read(); 
      Building building = new Building(); 
      building.BuildingID = int.Parse(dreadBuilding.GetValue(0).ToString()); 
      building.BuildingName = dreadBuilding.GetValue(1).ToString(); 
      building.IsActive = dreadBuilding.GetValue(2).ToString() == "Active"; 
      building.LastEditDate = dreadBuilding.GetValue(3).ToString() != string.Empty ? DateTime.Parse(dreadBuilding.GetValue(3).ToString()) : DateTime.MinValue; 
      building.LastEditUser = dreadBuilding.GetValue(4).ToString(); 
      dreadBuilding.Close(); 
      return building; 
     } 
     dreadBuilding.Close(); 
     return null; 
    } 

    .................... 
} 

我也想知道這可能是由於OOP實現:)

回答

4

DBML

優點:

  1. 你可以得到你的工作做得風生水起!

缺點:

  1. 你不能塑造你的實體您想要的方式,比如你需要從表5列,但它有10列,你會得到所有的人,至少其架構。如果你不關心數據容量
  2. 你的客戶端將與DAL(數據訪問層)有依賴關係,如果你改變屬性名稱,輸入DAL你需要改變BLL(業務邏輯層)和客戶端(表示層)

如果您手動創建類,則可能需要多一點時間來編寫代碼,但您可以更靈活地使用它。您的客戶端代碼將不依賴於您的DAL,DAL上的任何更改都不會導致客戶端代碼出現問題。

+0

Ahmm +1給你的朋友。你更喜歡使用存儲過程和舊的類創建類比DBML文件嗎? –

+0

是的,我更喜歡創建自己的自定義類,然後將視圖和存儲過程中的數據形成它。我以這種方式工作,長期得到更好的結果。 – Ekk

2

創建的兩種方法之間的快您的模型類可以手動將屬性添加到其他屬性(無法使用DBML完成),應用您自己的數據驗證(據我所知可以使用部分方法使用DBML完成)。

隨着許多表和關聯DBML可能變得難以閱讀。

手動創建模型類的缺點是您必須執行所有的DBML工作(屬性和大量的代碼)。

如果你想手動創建模型類,你可以看看Entity Framework Code First或者Fluent NHibernate。兩者都可以輕鬆創建模型。

+0

+1給你的哥們。對不起,但我仍然是一個新手,但這些屬性DBML有什麼。爲什麼他們重​​要的感謝:) –