zoukankan      html  css  js  c++  java
  • o/r数据映射

    get { return _fieldType; } set { _fieldType = value; } } } 通过自定义Attribute,我们定义了类属性和数据库字段的一一对应关系,于是对MyStudent 类的Name、Age 属性都加上Attribute 的描述,指定他们对应的数据库字段名以及类型。 代码更改如下: public class MyStudent { private string _name; //使用“特性”描述对应的数据库字段名、类型 [DataFieldAttribute("SName", "varchar")] public string Name { get { return _name; } set { _name = value; } } private int _age; [DataFieldAttribute("SAge", "int")] public int Age { get { return _age; } set { _age = value; } } } (三)ORM 映射规则的定义 给实体类增加DataFieldAttribute 的描述,其实就是增加了O(对象)/ R(关系数据库)的映射规则。 下面我们就通过反射的方法实现:在运行时动态获取O/R Mapping 的映射规则: static void Main(string[] args) { MyStudent stu1 = new MyStudent(); stu1.Name = "刘德华"; stu1.Age = 40; //通过反射的方法来动态获取此映射规则 PropertyInfo[] infos = stu1.GetType().GetProperties(); object[] objs_fieldAttr = null; foreach (PropertyInfo info in infos) { // GetCustomAttributes: // 返回实体对象中每个属性对应的“特性”信息(数据库字段名、类型) objs_fieldAttr = info.GetCustomAttributes( typeof(DataFieldAttribute), false); if (objs_fieldAttr != null) { Console.Write("实体类的属性名:" + info.Name); Console.Write(" -> 数据库字段名:"); Console.WriteLine(((DataFieldAttribute)objs_fieldAttr[0]).FieldName); } } } 显示结果: 实体类的属性名:Name -> 数据库字段名:SName 实体类的属性名:Age -> 数据库字段名:SAge 接下来的工作就是:怎样根据这种方法动态地从对象中获取映射规则,然后动态构造Insert、Update、Delete 等 SQL 语句。这就是实现自己的ORM 的原理。 这里的代码仅仅是举例,而要真正实现一个ORM,我们还需要考虑的很多,比如: 1、实体类对应于哪张数据库表? 2、数据库表中的 PK 和 FK(如果有的话)怎么表示?
  • 相关阅读:
    每日日报2020.12.1
    每日日报2020.11.30
    981. Time Based Key-Value Store
    1146. Snapshot Array
    565. Array Nesting
    79. Word Search
    43. Multiply Strings
    Largest value of the expression
    1014. Best Sightseeing Pair
    562. Longest Line of Consecutive One in Matrix
  • 原文地址:https://www.cnblogs.com/sheseido/p/1910125.html
Copyright © 2011-2022 走看看