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
原文地址:https://www.cnblogs.com/Brainpan/p/5305681.html