2011-11-09 103 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有什么。为什么他们重​​要的感谢:) –