Mego开发文档 - 数据属性生成值

数据属性生成值

该功能用于在数据插入或更新时为指定属性生成期望的值,Mego提供了非常灵活的实现方式以满足各种数据提交时的自动赋值问题。

生成值目的及模式

在Mego中生成值的目的一定是插入数据或更新数据,我们对这两种目的分开管理没有任何关系。
有如下四种值生成模式可作用于属性:

  1. 标识列
  2. 数据库生成
  3. 表达式生成
  4. 内存中生成

标识列生成值

例如下面这个例子对象Customer的数据对象Id属性在添加时会以标识列处理,对象成功插入后会从数据库返回相应的值。

public class Customer
{
    [Identity(1,1)]
    public int Id { get; set; }

    public string Name { get; set; }
}

数据库生成值

如下面这个例子所示,对象Customer的数据对象会在插入或更新成功后,会从数据库返回提交后的值,并且这会导致在提交时数据时会忽略内存中的值。

public class Customer
{
    public int Id { get; set; }
    public string Name { get; set; }
    [GeneratedValue(EGeneratedPurpose.InsertUpdate)]
    public Database CreateDate { get; set; }
}

内存中生成值

这个模式还在完善中。

自定义生成值

这是一个很灵活的值生成方式,在这种模式中您需要自己先定义好一个LINQ表达式,用于在数据提交时用该表达式所翻译的数据库表达式的执行结果来提交数据,同时会返回相应的结果。例如我们下面先定义一个用于获取当前时间的值生成特性。

public class GeneratedDateTimeAttribute : GeneratedExpressionAttribute
{
    public GeneratedDateTimeAttribute(EGeneratedPurpose purpose = EGeneratedPurpose.Update)
        : base(purpose)
    {
        Expression = Expression.MakeMemberAccess(null, typeof(DateTime).GetProperty(nameof(DateTime.Now)));
    }
}

之后我们将这个特性应用到指定的属性上,例如:

public class Customer
{
    public int Id { get; set; }

    [GeneratedDateTime(EGeneratedPurpose.InsertUpdate)]
    public Database UpdateDate { get; set; }
}

当数据对象Customer在插入或更新时都会执行数据库当前时间来更新UpdateDate字段。

[文档目录]

posted @ 2018-04-08 22:09  CarefreeXT  阅读(120)  评论(0编辑  收藏  举报