我总结的三层结构之二:IDAL示例

我总结的三层结构之二:IDAL示例

 

简单字典表的C# IDAL接口示例

 

数据表tFolk定义:

create table tFolk (

Id int identity(1,1) primary key,

Title nvarchar(50) not null unique

);

go

 

这是个简单的字典表,Id是主键;Title不允许空值,有唯一性约束。其对应IDAL接口如下:

 

//============================================================

// Module:              C# IDAL interface of data table [tFolk]

// Auto generated by:     mySagasoft CodeAssistant for MSPetShop3Tiers of sagahu@163.com, at 2012-07-29 14:50:40

// Usage:                     

// Last modified by: sagahu@163.com

// Last modified at:  2012-07-29 14:50:40

//============================================================

 

using System;

using System.Collections.Generic;

using System.Text;

 

using System.Data;

using mySagasoft.CodeTemplates.Models;  // 命名空间需要根据实际项目修改

 

namespace mySagasoft.CodeTemplates.IDAL // 命名空间需要根据实际项目修改

{

    public partial interface IFolkService

    {

        // 4个基本方法

        void Add(Folk model);

        void Delete(int? pk);

        void Update(Folk model);

        Folk GetModel(int? pk);

 

        // 2个返回多条记录的方法

        DataTable GetTable(string filter);

        IList<Folk> GetList(string filter);

 

        // 2个库内分页查询的方法

        DataTable GetTablePage(

            out int rowsCount, out int pagesCount,

            string where, string orderBy, int pageSize, int pageIndex);

        IList<Folk> GetPage(

            out int rowsCount, out int pagesCount,

            string where, string orderBy, int pageSize, int pageIndex);

 

        // 根据唯一性字段查询实体:由于本数据表除了主键之外,还有其它唯一性值字段,所以有下面的方法

        Folk GetModelByTitle(string title);

 

        // 如果需要使用悲观sql,还需要下面两个方法

        void Delete(Folk model);

        void Update(Folk newModel, Folk oldModel);

    }

}

 

简单业务数据表的C# IDAL接口示例

 

数据表tStudent定义:

create table tStudent (

Id int identity(1,1) primary key,

Name nvarchar(50) not null,

       Birthday datetime,

       FolkId int,

       IdentityCode varchar(20) not null unique,

       Photo image

);

go

 

这是个比较简单的业务表,Id是主键;IdentityCode不允许空值,有唯一性约束;Photo是大对象(large object)类型的字段。C# IDAL接口代码如下:

 

//============================================================

// Module:              C# IDAL interface of data table [tStudent]

// Auto generated by:     mySagasoft CodeAssistant for MSPetShop3Tiers of sagahu@163.com, at 2012-07-29 14:50:40

// Usage:                     

// Last modified by: sagahu@163.com

// Last modified at:  2012-07-29 14:50:40

//============================================================

 

using System;

using System.Collections.Generic;

using System.Text;

 

using System.Data;

using mySagasoft.CodeTemplates.Models;  // 命名空间需要根据实际项目修改

 

namespace mySagasoft.CodeTemplates.IDAL // 命名空间需要根据实际项目修改

{

    public partial interface IStudentService

    {

        // 4个基本方法

        void Add(Student model);    // 不包含大对象(large object)字段和它的值

        void Delete(int? pk);

        void Update(Student model); // 不包含大对象(large object)字段和它的值

        Student GetModel(int? pk);

 

        // 2个返回多条记录的方法,不包含大对象(large object)字段和它的值

        DataTable GetTable(string filter);

        IList<Student> GetList(string filter);

 

        // 2个库内分页查询的方法,不包含大对象(large object)字段和它的值

        DataTable GetTablePage(

            out int rowsCount, out int pagesCount,

            string where, string orderBy, int pageSize, int pageIndex);

        IList<Student> GetPage(

            out int rowsCount, out int pagesCount,

            string where, string orderBy, int pageSize, int pageIndex);

 

        // 根据唯一性字段查询实体:由于本数据表除了主键之外,还有其它唯一性值字段,所以有下面的方法

        Student GetModelByIdentityCode(string identityCode);

 

        // 由于本数据表具有大对象(large object)字段,所有还需要以下方法

        void UpdatePhoto(int? pk, byte[] photo);    // 根据主键单独更新大对象(large object)字段

        // 2个返回多条记录的方法,包含大对象(large object)字段和它的值

        DataTable GetTableWithLob(string filter);

        IList<Student> GetListWithLob(string filter);

        // 2个库内分页查询的方法,包含大对象(large object)字段和它的值

        DataTable GetTablePageWithLob(

            out int rowsCount, out int pagesCount,

            string where, string orderBy, int pageSize, int pageIndex);

        IList<Student> GetPageWithLob(

            out int rowsCount, out int pagesCount,

            string where, string orderBy, int pageSize, int pageIndex);

 

        // 如果需要使用悲观sql,还需要下面两个方法

        void Delete(Student model);

        void Update(Student newModel, Student oldModel);

    }

}

 

简单视图的C# IDAL接口示例

 

视图vwStudentView定义:

create view vwStudentView

       as

       select s.Id,s.Name,s.Birthday,s.FolkId,f.Title,s.IdentityCode,s.Photo from tStudent as s

       left join tFolk as f on s.FolkId=f.Id;

go

 

在这个简单视图里,Id、IdentityCode是唯一性键值。C# IDAL接口代码如下:

 

//============================================================

// Module:              C# IDAL interface of view [vwStudentViewService]

// Auto generated by:     mySagasoft CodeAssistant for MSPetShop3Tiers of sagahu@163.com, at 2012-07-29 14:50:40

// Usage:                     

// Last modified by: sagahu@163.com

// Last modified at:  2012-07-29 14:50:40

//============================================================

 

using System;

using System.Collections.Generic;

using System.Text;

 

using System.Data;

using mySagasoft.CodeTemplates.Models;  // 命名空间需要根据实际项目修改

 

namespace mySagasoft.CodeTemplates.IDAL // 命名空间需要根据实际项目修改

{

    public partial interface IStudentViewService

    {

        // 2个返回多条记录的方法,不包含大对象(large object)字段和它的值

        DataTable GetTable(string filter);

        IList<StudentView> GetList(string filter);

 

        // 2个库内分页查询的方法,不包含大对象(large object)字段和它的值

        DataTable GetTablePage(

            out int rowsCount, out int pagesCount,

            string where, string orderBy, int pageSize, int pageIndex);

        IList<StudentView> GetPage(

            out int rowsCount, out int pagesCount,

            string where, string orderBy, int pageSize, int pageIndex);

 

        // 根据唯一性字段查询实体:本视图有2个唯一性值的字段,所有有以下方法

        StudentView GetModelById(int? id);

        StudentView GetModelByIdentityCode(string identityCode);

 

        // 由于本视图具有大对象(large object)字段,所有还需要以下方法

        // 2个返回多条记录的方法,包含大对象(large object)字段和它的值

        DataTable GetTableWithLob(string filter);

        IList<StudentView> GetListWithLob(string filter);

        // 2个库内分页查询的方法,包含大对象(large object)字段和它的值

        DataTable GetTablePageWithLob(

            out int rowsCount, out int pagesCount,

            string where, string orderBy, int pageSize, int pageIndex);

        IList<StudentView> GetPageWithLob(

            out int rowsCount, out int pagesCount,

            string where, string orderBy, int pageSize, int pageIndex);

    }

}

 

补充思考

 

上面的接口是在这样的假定条件下设计的:数据表主键字段是单一的,不是多字段组合的情况;并且主键值在插入记录后不会再修改。否则上面设计不完全合适。

 

转载于:https://www.cnblogs.com/sagahu/archive/2012/10/06/2712695.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值