【问题标题】:Accessing and populating another class's properties in DAL BLL setup在 DAL BLL 设置中访问和填充另一个类的属性
【发布时间】:2018-09-23 14:12:02
【问题描述】:

我想在BLLServiceRequests 中返回DALServiceRequest 属性及其对应的DALRequest 属性,因为我使用的SP 是RequestServiceRequest 表之间的JOIN 表。问题是当我点击这段代码时:

var requestNewProjects = Common.ToList(dt);

找不到我在DALServiceRequest 的属性中设置的DALRequest 属性。有人可以向我指出实现这一点的正确方法吗?谢谢。

BLL

public class BLLServiceRequests
{

    public List<DALServiceRequests.Properties> GetServiceRequestByRequestId(intrequestID)
    {
        var obj = new DALServiceRequests();
        return obj.GetServiceRequestByRequestId(requestID);
    }
}

DAL

public class DALRequests
{
    public class Properties
    {
        public int id {get;set;}
        public int requestType { get; set; }
        public DateTime createDate { get; set; }
    }
}

public class DALServiceRequests
{
    public class Properties
    {
        public int id { get; set; }
        public int requestId { get; set; }
        public string Issue { get; set; }
        public DALRequests.Properties request { get; set; } //Is this correct?
    }

    public List<DALServiceRequests.Properties> GetServiceRequestByRequestId(int requestID)
    {
        string cnStr = Common.dbConnStr;

        SqlConnection cn = new SqlConnection(cnStr);
        SqlCommand cmd = new SqlCommand();
        DataTable dt = new DataTable();
        SqlDataAdapter adapter = new SqlDataAdapter();

        cmd.CommandType = CommandType.StoredProcedure;
        cmd.CommandText = "GetServiceRequestByRequestId";
        cmd.Parameters.Clear();
        cmd.Parameters.AddWithValue("@requestID", requestID);

        try
        {
            cn.Open();
            cmd.Connection = cn;
            adapter.SelectCommand = cmd;
            adapter.Fill(dt);

            var requestNewProjects = Common.ToList<DALServiceRequests.Properties>(dt);
            //Code above can't find the DALRequests properties which is already defined in DALServiceRequests.Properties

            return requestNewProjects;
        }
        catch (Exception ex)
        {
            throw ex;
        }
        finally
        {
            cn.Close();
            cn.Dispose();
            cmd.Dispose();
            dt.Dispose();
            adapter.Dispose();
        }
    }
}

这是我在 DAL 中的 Common 课程。这里没什么可看的,它只是我用来将数据表转换为列表的实用程序类

public static class Common
{
    public static string dbConnStr = ConfigurationManager.ConnectionStrings["dbConnString"].ToString();

    public static List<T> ToList<T>(DataTable table)
    {
        List<T> list = new List<T>();
        T item;
        Type listItemType = typeof(T);
        for (int i = 0; i < table.Rows.Count; i++)
        {
            item = (T)Activator.CreateInstance(listItemType);
            MapRow(item, table, listItemType, i);
            list.Add(item);
        }
        return list;
    }

    private static void MapRow(object vOb, DataTable table, Type type, int row)
    {
        for (int col = 0; col < table.Columns.Count; col++)
        {
            var columnName = table.Columns[col].ColumnName;
            var prop = type.GetProperty(columnName);
            object data = table.Rows[row][col];

            if (data == System.DBNull.Value)
            {
            }
            else
                prop.SetValue(vOb, data, null);
        }

    }
}

【问题讨论】:

    标签: c# asp.net data-access-layer business-logic-layer


    【解决方案1】:

    为此,您可以使用inheritance

    public class DALServiceRequests:DALRequests
    

    如果您将DALRequests 添加到DALServiceRequests,它将使您可以访问DALRequests 中的所有属性,包括所有方法,但我看到您只有DALRequests 中的属性

    另一种方法是像以前一样将类定义为属性,但没有.properties

    public DALRequests request { get; set; }
    

    然后您可以通过以下方式访问属性:

    DALServiceRequests req = new DALServiceRequests(); 
    var somePropInfo = req.DALRequests.createDate;// Fill it correcly in line above
    

    【讨论】:

      猜你喜欢
      • 2010-12-04
      • 1970-01-01
      • 2010-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-06
      • 2015-06-27
      • 2017-08-05
      相关资源
      最近更新 更多