【发布时间】:2018-09-23 14:12:02
【问题描述】:
我想在BLLServiceRequests 中返回DALServiceRequest 属性及其对应的DALRequest 属性,因为我使用的SP 是Request 和ServiceRequest 表之间的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