HTML5技术

GitHub开源:升讯威ADO.NET增强组件 sheng.ADO.NET.Plus V1.3 - sheng.chao(2)

字号+ 作者:H5之家 来源:H5之家 2017-03-22 13:02 我要评论( )

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.实体类对数据库表的多对多映射

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

 

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

相关文章
  • 开源的.NET定时任务组件Hangfire解析 - 彭泽0902

    开源的.NET定时任务组件Hangfire解析 - 彭泽0902

    2017-03-22 13:00

  • 开源免费的.NET图像即时处理的组件ImageProcessor - 彭泽0902

    开源免费的.NET图像即时处理的组件ImageProcessor - 彭泽0902

    2017-03-18 11:01

  • 一份关于组建.NET Core开源团队的倡议书 - 彭泽0902

    一份关于组建.NET Core开源团队的倡议书 - 彭泽0902

    2017-03-13 17:02

  • 【福利大放送】不止是Android,Github超高影响力开源大放送,学习开发必备教科书 - 南尘

    【福利大放送】不止是Android,Github超高影响力开源大放送,学习开

    2017-02-09 12:04

网友点评