自己写数据库访问ORM

 下面看一个例子:

现在有一个用户信息的表:E-R图如下:

要实现该表的数据库新增、修改、查询功能,需要实现下面两个业务类:

  1. using Csla; 
  2. using IF.CslaCore; 
  3. using IF.OrmCore.DataSchema; 
  4. using System; 
  5. using System.Collections.Generic; 
  6. using System.ComponentModel; 
  7. using System.Linq; 
  8. using System.Text; 
  9. using System.Threading.Tasks; 
  10.  
  11. namespace IF.SysUser.Business 
  12.     [Serializable
  13.     [TableClass(FriendlyName="用户信息表",TableName="SYS_USER")] 
  14.     public class SysUser : IfBusiness<SysUser> 
  15.     { 
  16.         private static readonly PropertyInfo<string> SUR_IDProperty = RegisterProperty<string>(c => c.SUR_ID); 
  17.  
  18.         [DisplayName("SUR_ID")] 
  19.         [FieldDescription(IsPrimaryKey=true,ColumnName="SUR_ID",FriendlyName="SUR_ID",NeedUpdate=true)] 
  20.         public string SUR_ID { get; set; } 
  21.  
  22.         private static readonly PropertyInfo<string> UserNameProperty = RegisterProperty<string>(c => c.UserName); 
  23.         [DisplayName("登录名")] 
  24.         [FieldDescription(ColumnName="SUR_USERNAME",FriendlyName="登录名",NeedUpdate=true)] 
  25.         public string UserName { get; set; } 
  26.  
  27.  
  28.         private static readonly PropertyInfo<string> NameProperty = RegisterProperty<string>(c => c.Name); 
  29.         [DisplayName("姓名")] 
  30.         [FieldDescription(ColumnName="SUR_NAME",FriendlyName="姓名",NeedUpdate=true)] 
  31.         public string Name { get; set; } 
  32.  
  33.         private static readonly PropertyInfo<string> PasswordProperty = RegisterProperty<string>(c => c.Password); 
  34.         [DisplayName("密码")] 
  35.         [FieldDescription(ColumnName="SUR_PASSWORD",FriendlyName="密码",NeedUpdate=true)] 
  36.         public string Password { get; set; } 
  37.  
  38.         private static readonly PropertyInfo<string> LoginMacProperty = RegisterProperty<string>(c => c.LoginMac); 
  39.         [DisplayName("登录Mac地址")] 
  40.         [FieldDescription(ColumnName="SUR_LOGIN_MAC",FriendlyName="登录Mac地址",NeedUpdate=true)] 
  41.         public string LoginMac { get; set; } 
  42.  
  43.         private static readonly PropertyInfo<string> LoginIPProperty = RegisterProperty<string>(c => c.LoginIP); 
  44.         [DisplayName("登录IP")] 
  45.         [FieldDescription(ColumnName="SUR_LOGIN_IP",FriendlyName="登录IP",NeedUpdate=true)] 
  46.         public string LoginIP { get; set; } 
  47.  
  48.  
  49.         private static readonly PropertyInfo<DateTime?> LoginTimeProperty = RegisterProperty<DateTime?>(c => c.LoginTime); 
  50.         [DisplayName("登录时间")] 
  51.         [FieldDescription(ColumnName="SUR_LOGIN_TIME",FriendlyName="登录时间",NeedUpdate=true)] 
  52.         public DateTime? LoginTime { get; set; } 
  53.  
  54.         private static readonly PropertyInfo<DateTime?> LogoutTimeProperty = RegisterProperty<DateTime?>(c => c.LogoutTime); 
  55.         [DisplayName("登出时间")] 
  56.         [FieldDescription(ColumnName="SUR_LOGOUT_TIME",FriendlyName="登出时间",NeedUpdate=true)] 
  57.         public DateTime? LogoutTime { get; set; } 
  58.  
  59.         private static readonly PropertyInfo<DateTime?> LoginFailTimeProperty = RegisterProperty<DateTime?>(c => c.LoginFailTime); 
  60.         [DisplayName("登录失败时间")] 
  61.         [FieldDescription(ColumnName="SUR_LOGIN_FAIL_TIME",FriendlyName="登录失败时间",NeedUpdate=true)] 
  62.         public DateTime? LoginFailTime { get; set; } 
  63.  
  64.         private static readonly PropertyInfo<Int32?> LoginFailCountProperty = RegisterProperty<Int32?>(c => c.LoginFailCount); 
  65.         [DisplayName("登录失败次数")] 
  66.         [FieldDescription(ColumnName="SUR_LOGIN_FAIL_COUNT",FriendlyName="登录失败次数",NeedUpdate=true)] 
  67.         public Int32? LoginFailCount { get; set; } 
  68.  
  69.  
  70.         private static readonly PropertyInfo<bool?> LockFGProperty = RegisterProperty<bool?>(c => c.LockFG); 
  71.         [DisplayName("是否锁定")] 
  72.         [FieldDescription(ColumnName="SUR_LOCK_FG",FriendlyName="是否锁定",NeedUpdate=true)] 
  73.         public bool? LockFG { get; set; } 
  74.  
  75.         private static readonly PropertyInfo<bool?> DisableFGProperty = RegisterProperty<bool?>(c => c.DisableFG); 
  76.         [DisplayName("是否有效")] 
  77.         [FieldDescription(ColumnName="SUR_DISABLE_FG",FriendlyName="是否有效",NeedUpdate=true)] 
  78.         public bool? DisableFG { get; set; } 
  79.  
  80.  
  81.         #region 通用字段 
  82.  
  83.         private static readonly PropertyInfo<DateTime?> CreateTimeProperty = RegisterProperty<DateTime?>(c => c.CreateTime); 
  84.         [DisplayName("创建时间")] 
  85.         [FieldDescription(ColumnName="CreateTime",FriendlyName="创建时间",NeedUpdate=true)] 
  86.         public override DateTime? CreateTime { get; set; } 
  87.  
  88.         private static readonly PropertyInfo<DateTime?> LastUpdateTimeProperty = RegisterProperty<DateTime?>(c => c.LastUpdateTime); 
  89.         [DisplayName("***修改时间")] 
  90.         [FieldDescription(ColumnName="LastUpdateTime",FriendlyName="***修改时间",NeedUpdate=true)] 
  91.         public override DateTime? LastUpdateTime { get; set; } 
  92.  
  93.  
  94.  
  95.         public override void SetPrimaryKey(string key
  96.         { 
  97.             SUR_ID = key
  98.         } 
  99.         #endregion 
  100.     } 
  101.  
  102.     [Serializable
  103.     public class SysUserList : IfBusinessList<SysUserList, SysUser> 
  104.     { } 

现在就可以工作了:

全表检索数据方法:

  1. SysUserList selData = SysUserList.Fetch(); 

向数据库新增一条数据:

  1. SysUser.Business.SysUser user = new SysUser.Business.SysUser(); 
  2. user.UserName= "inaction"
  3. user.Name = "流砂"
  4. user.Password"superman"
  5. selData.Add(user); 
  6. selData.Save(); 

向数据库修改数据:

  1. var user = SysUserList.Fetch(c => c.UserName == "inaction"); 
  2. user.Password = "123456"
  3.  SysUserList list = new SysUserList { user }; 
  4.  list.Save(); 

以上代码就实现了对密码的修改。

特别说明:目前IF 只能通过SysUserList对象的Save方法保存数据。以后会实现通过业务类自身Save方法保存数据。

原文链接:http://www.cnblogs.com/nactioncsla/p/3439820.html

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/267267.html<

(0)
管理的头像管理
上一篇2025-05-06 08:24
下一篇 2025-05-06 08:25

相关推荐

  • 云服务器和云虚拟主机怎么选?云服务器和虚拟主机区别

    云服务器适合业务增长快、需弹性扩展的场景,而云虚拟主机适合预算有限、技术门槛低的小型静态网站或测试环境,二者核心区别在于资源独享性与运维复杂度,核心差异解析:从底层架构到使用体验很多人容易混淆这两者,觉得它们都是“买空间建站”,它们的底层逻辑完全不同,云服务器(ECS)就像是你租了一整栋别墅,水电网络独立,你想……

    2026-06-29
    0
  • 赣州智慧旅游招聘是真的吗?赣州旅游人才招聘信息

    中级岗位(3-5年经验)月薪范围通常在6000-10000元,这类岗位需要独立负责项目模块,如独立运营一个抖音账号,或维护一个景区小程序的功能迭代,具备成功案例的候选人议价能力较强,高级岗位(5年以上经验)月薪范围通常在10000-20000元,部分核心管理岗可达更高,这类人才需要具备战略规划能力,如制定整个景……

    2026-06-29
    0
  • 赣州智能物联网车位锁如何管理?智能车位锁管理系统多少钱

    赣州智能物联网车位锁管理的核心在于通过云端平台实现远程控锁、状态实时监控及自动计费,彻底解决传统车位“被占难管”与“找位难”的痛点,在赣州这样的城市,随着机动车保有量的持续增长,老旧小区、商业综合体以及私人固定车位的资源矛盾日益凸显,传统的机械地锁或简易遥控锁,不仅操作繁琐,更无法实现数据化管理,引入智能物联网……

    2026-06-29
    0
  • 赣州智能消防栓好用吗,智能消防栓多少钱一个

    赣州智能消防栓通过物联网技术实现实时监测与远程报警,能显著降低火灾响应时间并提升城市消防安全管理水平,是目前智慧城市建设中不可或缺的基础设施,赣州智能消防栓的核心价值与应用场景传统消防栓往往存在“看不见、摸不着、用不了”的痛点,在赣州这样地形复杂、老城区与新城区并存的区域,传统设施的管理难度极大,智能消防栓的出……

    2026-06-29
    0
  • 云服务器和物理机到底有啥区别?

    云服务器本质上是虚拟化资源池中的弹性实例,而传统物理服务器是独占的硬件实体,前者胜在弹性与运维便捷,后者强在物理隔离与性能稳定,具体选择取决于业务对成本、扩展性及安全合规的权衡,很多人初次接触服务器时,容易把“云服务器”和“传统物理服务器”混为一谈,觉得它们都是用来跑网站或存数据的盒子,这两者的底层逻辑完全不同……

    2026-06-29
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注