HTML5技术

升讯威ADO.NET增强组件(源码):送给喜欢原生ADO.NET的你 - sheng.chao(2)

字号+ 作者:H5之家 来源:H5之家 2016-12-20 11:01 我要评论( )

public class User{ [Key] public Guid Id{ get ; set ;}...... } 至此我们实现了基本的数据库操作的自动化。 是不是很熟悉,和Entity Framework很类似是不是? 二、自定义实体类与数据库表的映射关系 上文中的简单

public class User { [Key] public Guid Id { get; set; } ...... }

 

至此我们实现了基本的数据库操作的自动化。

是不是很熟悉,和Entity Framework很类似是不是? 

 

二、自定义实体类与数据库表的映射关系

上文中的简单增删改查操作,是根据对象实例得到对象类型从而得到类型名称和属性(Property)集合及他们的名称,那么如果实体类型的名称与数据库表名称并不一样怎么办呢?如果数据实体的属性(Property)与数据库表字段并不一一对应怎么办呢?

在大型项目中,这种情况是经常存在的,对于复杂的数据库表设计,到了业务层,可能会有不同的解释方法,例如我有一张用户表,包含了产品不同维度的信息:基本信息、扩展信息等。到了业务实现层面,我希望展开为两个不同的实体对象进行操作,基本信息对象和扩展信息对象。他们所使用的字段可能不太相同,却又包括了某些共通的字段,如Id,姓名。

如上文所说,升讯威ADO.NET增强组件没有强制的实体类与数据库表的映射关系要求,数据库表中的字段多少与实体类中的属性多少,或者说表中有的,实体类中没有,都没有关系,实体类中有的,通过Attribute标记是否映射即可。

 

1.数据库表名的映射指定

我们定义两个不同的实体类:

[Table("User")] public class User_BaseInfo { [Key] public Guid Id { get; set; } public string Name { get; set; } public int Age { get; set; } }

 

[Table("User")] public class User_ExtraInfo { [Key] public Guid Id { get; set; } public string ExtraInfo { get; set; } }

 

只需在类型定义前加上 TableAttribute ,对 User_BaseInfo 或 User_ExtraInfo 类的对像实例进行操作,直接使用上文中的增删改查方法即可。至此我们已经开始解除了实体类与数据库表结果的强关联。

 

2.数据库表字段的映射指定

此处严格来讲,并非一般ORM中针对 数据库表字段 的映射,而是针对 结果集字段 的映射。比如说通过复杂SQL,存储过程得到的结果集,根本不是数据库中的表

在某些场景中,实体类中需要额外定义一些属性,用于存储特定信息或实现特定功能,这些数据并不需要进行持久化存储。或是实体类中的属性名称与数据库表字段名称存在不完全相同的情况,如将一张表映射到多个数据实体后,为了区别描述,以及基于复杂查询(SQL,存储过程)得到的结果集中的字段名。

)] public class User_ExtraInfo { [Key] public Guid Id { get; set; } [Column("ExtraInfo")] public string Infomation { get; set; } [NotMapped] public int Count { get; set; } }

 

只需在属性定义前加上 ColumnAttribute 或 NotMapped ,使用上文中的增删改查方法即可实现相应的操作。

 

3.实体类对数据库表的多对多映射

此功能用于将二维的数据库表(或结果集)进一步强类型化

在使用一般ORM框架时,对于复杂的数据库表结构,常常可以见到非常多的字段定义,但在我们的实际业务中,这些字段可能都有不同的逻辑归属,此外,在开发中,我们可能在数据传递,操作的过程中,希望只传递或公开一部分数据,而不是整个对象进行传递

public class User { [Key] public Guid Id { get; set; } public string Name { get; set; } public int Age { get; set; } [Partial] public ExtraInfo ExtraInfo { get; set; } } public class ExtraInfo { public string ExtraInfo { get; set; } }

 

只需在对象上加上 PartialAttribute ,表示属性的对象是 当前数据集 的一部分字段所表示的子对象

PartialAttribute  还提供了 FieldRelationship 用来进一步指定映射关系。

这样我们实现了实体类对数据表(数据集)的多对一映射,那如何实现多对多的映射呢?实际上非常简单,使用SQL,视图,存储过程进行多表查询,结合使用 PartialAttribute 即可。

 

三、进阶操作 1.高级查询

除了上文中提到的基本 Select<T>() 方法外,升讯威ADO.NET增强组件提供了额外的几个进阶方式进行数据查询。

 

a) 基本查询

public List<T> Select<T>() where T : class,new()

上文已展示。

 

b) 附加查询条件

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 升讯威微信营销系统开发实践:(3)中控服务器的设计 .Net 还是 Java? - sheng.chao

    升讯威微信营销系统开发实践:(3)中控服务器的设计 .Net 还是 Java

    2016-08-26 16:00

  • html5增强的页面元素 - Honker书生

    html5增强的页面元素 - Honker书生

    2016-06-16 11:00

  • 5个CSS3技术实现设计增强 - jerrylsxu

    5个CSS3技术实现设计增强 - jerrylsxu

    2016-05-09 14:00

  • 使用ARIA角色增强可访问性 - 易天曦小盆友

    使用ARIA角色增强可访问性 - 易天曦小盆友

    2015-11-20 11:34

网友点评