欢迎来到.net学习网

欢迎联系站长一起更新本网站!QQ:879621940

您当前所在位置:首页 » QDORM使用帮助 » 正文

最新评论

让QDORM认识数据模型

创建时间:2017年06月15日 17:54  阅读次数:(3201)
分享到:
我们创建了一个数据模型(Model类),QDORM怎么去了解认识这个Model类呢?和Entity Framework一样,使用类的自定义特性(Attribute),以下称QDORM特性。

在ODORM里包含分两类特性:
1,类特性,描述数据模型的行为或含义。
2,字段特性,描述数据模型各属性与数据库中字段的映射关系。

如以下示例:
[DbSchema(TableName = "t_ PBOOK ")]
public class PBOOK : IModel
{
    [Key]
    public string ProCode { get; set; }

    [DbColumn(IsMapping = false)]
    public string ProName { get; set; }
}

其中[DbSchema(TableName = "t_ PBOOK ")]为类特性,[Key]与[DbColumn(IsMapping = false)]为字段特性。

那么,QDORM中现共包含多少特性,各特性又各自代表什么意思呢?

一、DbSchema特性
DbSchema特性只能用于描述类,它包含两个属性:
1,TableName:对应于数据库中的表名。比如有时候我们创建的数据模型类名为PBOOK,但对应于数据库的表名为t_PBOOK,那么我们可以使用该属性与之对应。如果没有设置该属性,则默认类名等于表名。
2,SelectName:取数的表名或视图名。如果有设置该属性,那么我们使用QDORM从数据库中取数据模型时(如第一节中的dbConfig.Model.GetModelByPrimaryKey<Book >() 方法),就会从SelectName指定的表或视图中取数。如果没有设置该属性,则默认为TableName属性。

DbSchema特性的源码如下:
/// <summary >
/// 对应数据库表特性
/// </summary >
[AttributeUsage(AttributeTargets.Class, AllowMultiple = true)]
public class DbSchema : Attribute
{
    /// <summary >
    /// 对应表名
    /// </summary >
    public string TableName { get; set; }

    /// <summary >
    /// 取数的表名或视图表
    /// </summary >
    public string SelectName { get; set; }
}

二、Key特性
Key特性只能用于描述类的属性,如果某属性设置了该Key特性,QDORM则认为该属性对应的数据库表字段为主键。Key特性只包含一个属性Order:
1,Order:描述主键的顺序,如果表只包含一个主键,Order可以不设置值,但如果表包含了多个主键,则必须为Order设置值,且值不能相等。

Key特性源码如下: 
/// <summary >
/// 主键
/// </summary >
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = false)]
public class Key : Attribute
{
    /// <summary >
    /// 主键顺序
    /// </summary >
    public int Order { get; set; }
}

三、DbColumn特性
DbColumn特性只能用于描述类的属性,它包含了多个属性,分别如下:
1,Identity:自增量,描述当前属性对应的数据库字段是否为自增量。
2,IsCompute:计算列,描述当前属性对应的数据库字段是否为计算列。
3,IsMapping:是否映射数据库中字段。 这个属性非常方便,如果我们的类中某个属性返回值是程序计算的结果,不是从数据库中取的值。那么可以将该属性设置为false,QDORM在对模型的“增删改查“操作中就会忽略该属性。该属性默认值为true。
4,ColumnName:数据库中列名,描述当前属性对应数据库中的那个列。如果不设置该属性,则默认为列名和属性名相同。
5,IsIgnoreInsert:插入数据时是否忽略当前属性。这个好理解了,比如数据库中有一个“修改时间“列,这个列在插入数据时是不用保存值的。我们将该属性设置为true,则不用担心在插入数据时是否为“修改时间“赋了值,即使是赋了值,QDORM也会忽略掉该值。
6,IsIgnoreModify:修改数据时是否忽略当前属性。和IsIgnoreInsert相对应,比如数据库中有一个“创建时间“列,这个列应该是插入数据时赋值,且后面不再能被修改。我们将该属性设置为true,则不用担心在修改数据时是否为“创建时间“赋了值,即使是赋了值,QDORM也会忽略掉该值。
7,IsUnique:是否唯一(保存数据时依据IsUnique组合判断数据的唯一性)。这个用于批量保存数据,比如我们要批量保存一批身份证号,因为身份证号是不允许重复的,那么我们可将身份证号这个属性的IsUnique设置为true,则QDORM在保存数值时会先检查身份证号是否重复。可以同时为多个类属性设置该特性,QDORM会依据IsUnique组合判断数据是否有重复。

DbColumn特性源码如下:
/// <summary >
/// 对应数据库列特性
/// </summary >
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = true)]
public class DbColumn : Attribute
{
    /// <summary >
    /// 是否自增量
    /// </summary >
    public bool Identity { get; set; }

    /// <summary >
    /// 是否计算列
    /// </summary >
    public bool IsCompute { get; set; }

    private bool _IsMapping = true;
    /// <summary >
    /// 是否映射数据库中的列
    /// </summary >
    public bool IsMapping
    {
        get { return _IsMapping; }
        set { _IsMapping = value; }
    }

    /// <summary >
    /// 数据库中列名
    /// </summary >
    public string ColumnName { get; set; }

    /// <summary >
    /// 插入数据时是否忽略当前属性
    /// </summary >
    public bool IsIgnoreInsert { get; set; }

    /// <summary >
    /// 修改数据时是否忽略当前属性
    /// </summary >
    public bool IsIgnoreModify { get; set; }

    /// <summary >
    /// 查找数据时是否忽略当前属性
    /// </summary >
    public bool IsIgnoreSelect { get; set; }

    /// <summary >
    /// 是否唯一(保存数据时依据IsUnique组合判断数据的唯一性)
    /// </summary >
    public bool IsUnique { get; set; }
}
来源:.net学习网
说明:所有来源为 .net学习网的文章均为原创,如有转载,请在转载处标注本页地址,谢谢!
【编辑:Wyf】

打赏

取消

感谢您的支持,我会做的更好!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

最新评论

共有评论0条
  • 暂无任何评论,请留下您对本文章的看法,共同参入讨论!
发表评论:
留言人:
内  容:
请输入问题 5+88=? 的结果(结果是:93)
结  果: