【问题标题】:Manual Creation of Classes Vs. DBML手动创建类与。数据库ML
【发布时间】:2011-11-09 08:44:16
【问题描述】:

当我想到这些东西时,我目前正在为我的应用程序创建对象。我知道使用 DBML 的类的手动创建(见下面的类)可以提高我的应用程序开发的速度,但我真的很困惑使用 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 实现方法之间是否更快,谢谢:)

【问题讨论】:

    标签: c# .net oop object linq-to-sql


    【解决方案1】:

    DBML

    优点:

    1. 您可以快速完成工作!

    缺点:

    1. 您无法按照您想要的方式塑造您的实体,例如,您需要表中的 5 列,但它有 10 列,您将获得所有这些列,至少是它的架构。如果您不太关心数据量
    2. 您的客户端将依赖于 DAL(数据访问层),如果您更改属性名称,请输入您需要在 BLL(业务逻辑层)和客户端(表示层)中更改的 DAL

    如果您手动创建类,您可能会花费更多时间来编写代码,但您会变得更加灵活。您的客户端代码将不依赖于您的 DAL,对 DAL 的任何更改都不会导致客户端代码出现问题。

    【讨论】:

    • 嗯 +1 给你,伙计。与 DBML 文件相比,您更喜欢使用存储过程和旧类型的类创建吗?
    • 是的,我更喜欢创建自己的自定义类,然后从视图中塑造数据并将过程存储到其中。我以这种方式工作,从长远来看,我会得到更好的结果。
    【解决方案2】:

    手动创建模型类,您可以将附加属性添加到属性(不能使用 DBML 完成),应用您自己的数据验证(据我所知,可以使用部分方法使用 DBML 完成)。

    如果有许多表和关联,DBML 可能会变得难以阅读。

    手动创建模型类的缺点是您必须完成所有 DBML 工作(属性和大量代码)。

    如果您想手动创建模型类,您可以查看 Entity Framework Code First 或 Fluent NHibernate。两者都可以轻松创建模型。

    【讨论】:

    • +1 给你,伙计。对不起,我还是个新手,但是 DBML 有哪些属性。以及为什么它们很重要谢谢:)
    猜你喜欢
    • 2014-05-17
    • 2018-07-06
    • 1970-01-01
    • 1970-01-01
    • 2019-05-21
    • 2011-10-18
    • 2020-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多