【发布时间】:2016-04-01 12:21:10
【问题描述】:
我有一个示例 ASP.net 应用程序,我想使用 n 层架构创建它,所以我有一个包含表和存储过程(对这些表执行 (CRUD) 操作)的数据库 ,现在当我尝试创建数据访问层时,我创建了使用 ado.net 调用这些存储过程的方法,并且我已经创建了它,但是这些方法返回的数据表如下所示:
public DataTable getallcourcesdetailsbyid(string courseid) {
SqlParameter[] parameter = new SqlParameter[] { new SqlParameter("@courseid", courseid) };
return sqlhelper.ExecuteParamerizedSelectCommand("usp_getcoursedetailsbyid", CommandType.StoredProcedure, parameter);
}
所以我发现有更好的方法来创建具有表示数据库中表的属性的类来保存数据访问层返回的数据 喜欢这个:
class course{
public int courseid { get; set; }
public string coursename { get; set; }
public short specializationid { get; set; }
public short subjectid { get; set; }
public short instructorid { get; set; }
public string startdate { get; set; }
public string enddate { get; set; }
public bool isactive { get; set; }
public bool isdeleted { get; set; }
}
但这些存储过程并不总是返回特定表中的数据,例如上面的课程课程在数据库中显示课程表,但上面称为“getallcourcesdetailsbyid”的方法使用以下代码调用存储过程
select courseid,coursename,startdate,enddate,courseimgpath,specialization,firstname,lastname,subjectname,price,coursedetails,teacherimgpath
from joacademytest.course
inner join joacademytest.specialization ON joacademytest.course.specializationid = joacademytest.specialization.specializationid
inner join joacademytest.[subject] on joacademytest.course.subjectnameid=joacademytest.[subject].subjectid
inner join joacademytest.teachers on joacademytest.course.instructerid=joacademytest.teachers.teacherid
inner join dbo.courcesprices on joacademytest.course.priceid=dbo.courcesprices.priceid
where joacademytest.course.isactive=1 and joacademytest.course.isdeleted=0 and courseid = @courseid;
所以存储过程不会返回课程对象中存在的相同列,但它表示来自 4 个连接表的列,所以我必须根据表上存在的列或返回的列创建实体类通过我的存储过程。我在网上搜索过,从来没有发现任何人提到我可以根据存储过程返回的列创建实体类,这让我很困惑。
【问题讨论】:
标签: c# asp.net data-access-layer n-tier-architecture