c# - 在 ASP.net 的数据访问层中创建实体的正确方法是什么?

标签 c# asp.net data-access-layer n-tier-architecture

我有一个示例 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; }
}

但是这些存储过程并不总是从特定表中返回数据,例如上面的类(class)类(class)在数据库中显示类(class)表,但是上面调用“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;

所以存储过程不会返回类(class)对象中存在的相同列,但它代表来自 4 个连接表的列,所以我必须根据表中现有的列或返回的列创建实体类通过我的存储过程。我搜索了 Internet,但从未发现任何机构提到我可以根据存储过程返回的列创建实体类,这让我感到困惑。

最佳答案

创建映射到存储过程结果的类没有错。事实上,许多 ORM 像 Entity Framework ,nHibernate 允许你这样做。最后,这完全取决于您想要实现的目标、性能、维护等,这些都是非常广泛的主题。回答您的问题并牢记您当前的设置,我建议-

  • 如果存储过程是从数据库获取数据的首选方式,则创建映射到存储过程的实体,事实上,为了避免重复发明轮子,您可以使用众多 Orm 工具之一 - dapper , EF .
  • 或者您可以返回动态对象,而不是从您的数据表创建实体。

希望对你有帮助

关于c# - 在 ASP.net 的数据访问层中创建实体的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34480169/

相关文章:

c# - 为什么在 StreamReader.Read 周围使用 using() {} 允许之后删除文件?

c# - 动态设置Word CustomTaskPane宽度

asp.net - 在 session 超时时调用方法?

delphi - delphi的数据访问框架

c# - 如何自定义 415 状态码的错误信息?

c# - 使用 callvirt 调用 base.ToString() 如何导致 StackOverflow 异常?

c# - 我什么时候应该使用 Localize 控件而不是 Literal?

javascript或jquery改变div的innerHTML?

asp.net - .NET MVC 还是普通的 ASP.NET?

mysql - 数据访问层测试框架