• DbEntry.Net.v3.5 快速教程


    1、DbEntry 介绍

    EN&Download——[DbEntry Framework下载][Tutorials For Version 3.5]

    CN&Summary:总体特性的介绍详见Elephant翻译的DbEntry Framework系列[Elephant‘s WorkBench]

    2、object definition

    ///<authors>
    /// SOPICH
    /// </authors>
    /// <email>
    /// titan_song713@hotmail.com
    /// </email>
    /// <date>2009/03/06</date> 
    
    #region 数据对象类的实现 <Inherit from>DbObjectModel||DbObject||IDbObject||NamedDbObject
    /// <summary>
    /// 定义一个派生于DbObjectModel<T>的类User
    /// </summary>
    /// <methods>
    /// DbObjectModel<T>的静态方法
    /// Save()——当数据库无此记录则Insert(),有则Update()
    /// Delete()
    /// Find()
    /// New()
    /// FindById()
    /// FindBySql()
    /// FindOne()
    /// FindRecent()
    /// etc.
    /// </methods>
    /// <bookmarks>
    /// 拥有特殊的PartialUpdate()
    /// </bookmarks>
    
    public abstract class User : DbObjectModel<User>
    {
        public abstract string Name { get; set; }
    }
    
    /// <summary>
    /// 定义一个派生于DbObject的类User
    /// </summary>
    /// <methods>
    /// 无静态方法
    /// </methods>
    /// <bookmark>
    /// 默认添加一个[User].Id的column,并设置为long型的自增长标识符
    /// 无静态方法PartialUpdate()
    /// </bookmark>
    public class User : DbObject
    {
        public string Name;
    }
    /// <summary>
    /// 定义一个派生于System.object的类User
    /// </summary>
    /// <methods>
    /// </methods>
    /// <parameters>
    /// bool IsDbGenerate——可定义改属性是否为自增长,默认为true
    /// int Length——最大长度
    /// </parameters>
    /// <bookmark>
    /// 无Id,但可自定义主键和多键位
    /// </bookmark>
    public class User : IDbObject
    {
        [DbKey(IsDbGenerate=false), Length(50)]//设置主键为Name字段,string.Length为50,非自增长类型
        public string Name;
    }
    
    
    
    /// <summary>
    /// 定义一个派生于NamedDbObject的类User
    /// </summary>
    /// <methods>
    /// 同上
    /// </methods>
    
    public class User : NamedDbObject, IDbObject
    {
        //默认主键为Name,Name.Length=255
    }
    #endregion
    
    #region [DbKey]——键位的设置
    /// <summary>
    /// [DbKey]
    /// </summary>
    /// <methods>
    /// </methods>
    /// <performance>
    /// 实现该属性为一个主键,默认属性IsDbGenerate为true,会自增长
    /// </performance>
    ///单主键primary key
    public class User : IDbObject
    {
        [DbKey]///相当于IsDbGenerate=true
        public long userID;
     
        public string Name;
    }
    ///多键位mutil-key
    public class MKey : IDbObject
    {
        [DbKey(IsDbGenerate = false), Length(50)]
        public string Name;
     
        [DbKey(IsDbGenerate = false)]
        public int Age;
     
        public bool Gender;
    }
    #endregion
    
    #region [DbTable]自定义Table对象的名称    [DbColumn]自定义Column的名称
    /// <summary>
    /// 提供数据库对象的属性定制
    /// </summary>
    /// <methods>
    /// [DbTable("TableName")]——数据库Table对象的名称
    /// 位于类声明的前面
    /// </methods>
    /// <methods>
    /// [Length(int i), AllowNull,StringColumn(IsUnicode=true, Regular=CommonRegular.[EmailRegular||Url])]
    /// 设置Column的长度,是否为空,字符列的格式(bool IsUnicode)用于区分nvar和var等,(Enum CommonRegular)提供了常用的email和url正则表达式验证
    ///位于字段名声明的前面
    /// </methods>
    /// <bookmark>
    /// 实现这种映射还可以在config文件(App.config or Web.config)
    ///      <Lephone.Settings>
    ///             <add key="@数据库表名" value="自定义对象类" />
    ///      </Lephone.Settings>
    /// </bookmark>
    [DbTable("User")]
    public class MyUser : IDbObject
    {
        [DbColumn("Name")]
        public string theName;
    }
    public class User : IDbObject
    {
        [Length(50), AllowNull]
        public string Name;
     
        [StringColumn(IsUnicode=true, Regular=CommonRegular.EmailRegular||url)]
        public string Email;
    }
    #endregion
    
    #region [Exclude]
    /// <summary>
    /// [Exclude]——修饰数据对象中不需要实现数据库交互的字段
    /// </summary>
    /// <methods>
    /// 除了使用[Exclude],私有字段和只读属性,都不会实现数据库存储交互
    /// </methods>
    
    public class User : IDbObject
    {
        public string Name;
     
        [Exclude]
        public bool isUserInput;
     
        private int times; // exclude too
     
        public int code { get { return 0; } } // exclude too
    }
    #endregion
    
    #region 数据库索引
    /// <summary>
    /// [Index("Name_Age", ASC = false, UNIQUE = true)]
    /// </summary>
    /// <performance>
    /// 建立索引
    /// </performance>
    
    class MyTest
    {
        [DbKey]
        public long Id = 0;
     
        [Index("Name_Age", ASC = false, UNIQUE = true)]
        public string Name = null;
     
        [Index("Name_Age", ASC = false, UNIQUE = true)]
        public int Age = 0;
    }
    #endregion
    #region Join 表的联合
    /// <summary>
    /// 实现两个或多个表的联合
    /// </summary>
    /// <methods>
    /// [JoinOn(int Index,"first col","second col",Enum CompareOpration,Enum JoinMode)]
    /// </methods>
    //两个表的联合
    [DbTable("SampleData.Id", "TheAge.Id")]
    public class JoinTable1 : IDbObject
    {
        [DbColumn("SampleData.Id")] public long Id;
        public string Name;
        public UserRole Role;
        public DateTime JoinDate;
        public int Age;
    }
    //三个表的联合
    [JoinOn(0, "SampleData.Id", "TheAge.Id", CompareOpration.Equal, JoinMode.Inner)]
    [JoinOn(1, "SampleData.Id", "EnumTable.Id", CompareOpration.Equal, JoinMode.Inner)]
    public class JoinTable2 : IDbObject
    {
        [DbColumn("SampleData.Id")] public long Id;
        [DbColumn("SampleData.Name")] public string Name;
        public UserRole Role;
        public DateTime JoinDate;
        public int Age;
        [DbColumn("EnumTable.Name")] public string EnumName;
    }
    #endregion
    
    #region Object Relationship[HasOne, HasMany, BelongsTo, HasAndBelongsToMany]
    /// <summary>
    /// 实现一对一、一对多、多对一、多对多的对象关系
    /// </summary>
    [DbTable("People")]
    public abstract class Person : DbObjectModel<Person>
    {
        public abstract string Name { get; set; }
     
        [HasOne(OrderBy = "Id DESC")]
        public abstract PersonalComputer PC { get; set; }
    }
     
    public abstract class PersonalComputer : DbObjectModel<PersonalComputer>
    {
        public abstract string Name { get; set; }
     
        [BelongsTo, DbColumn("Person_Id")]
        public abstract Person Owner { get; set; }
    }
    #endregion
    
    #region Just Example
    /// <summary>
    /// 如何定义枚举型的字段,实现数据对象的域
    /// </summary>
    public enum UserRole
    {
        Manager,
        Worker,
        Client
    }
     
    public abstract class SampleData : DbObjectModel<SampleData>
    {
        [Length(50)] public abstract string Name { get; set; }
        public abstract UserRole Role { get; set; }
        public abstract DateTime JoinDate { get; set; }
        public abstract bool Enabled { get; set; }
        public abstract int? NullInt { get; set; }
     
        public SampleData() {}
        public SampleData(string Name, UserRole Role, DateTime JoinDate, bool Enabled)
            : this(Name, Role, JoinDate, Enabled, null) { }
        public SampleData(string Name, UserRole Role, DateTime JoinDate, bool Enabled,
            int? NullInt)
        {
            this.Name = Name;
            this.Role = Role;
            this.JoinDate = JoinDate;
            this.Enabled = Enabled;
            this.NullInt = NullInt;
        }
    }
    #endregion
  • 相关阅读:
    RocketMQ同一个消费者唯一Topic多个tag踩坑经历
    1.写一个字符串反转函数.
    1.什么是灰度发布?
    简单比较 @EnableEurekaClient 和 @EnableDiscoveryClient 两个注解
    字符串拼接出现null的问题
    webSocket无法注入bean问题解决方案
    数据库中的时间类型需要指定长度吗?
    SQL语句的优化
    NoClassDefFoundError
    1.代码规范之 if 语句编写
  • 原文地址:https://www.cnblogs.com/Brainpan/p/5305681.html
Copyright © 2020-2023  润新知