数据属性生成值

该功能用于在数据插入或更新时为指定属性生成期望的值,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字段。

[文档目录]

Mego开发文档 - 数据属性生成值的更多相关文章

  1. Mego开发文档 - 索引

    Mego 开发文档 Mego 快速概述 主要特性 获取Mego 使用流程 模型 查询 保存数据 入门 Mego 快速开始 创建项目 安装Nuget包 创建连接字符串 创建模型及数据上下文(添加引用) ...

  2. Mego开发文档 - 处理并发冲突

    处理并发冲突 数据库并发是指多个进程或用户同时访问或更改数据库中的相同数据的情况.并发控制是指用于确保存在并发更改时数据一致性的特定机制. Mego实现了乐观并发控制,这意味着它可以让多个进程或用户独 ...

  3. Mego开发文档 - 复杂保存操作

    复杂保存操作 Mego框架还提供了更强大的数据更新API,以简化开发工作,同时也保证的性能. 指定属性添加数据 本列中指定插入一个数据对象,并且只会插入三列数据,最后两个属性是以表达式的形式插入. u ...

  4. Mego开发文档 - 事务

    事务 事务允许以原子方式处理多个数据库操作.如果事务已提交,则所有操作都已成功应用于数据库.如果事务回滚,则没有任何操作应用于数据库. 默认行为 默认情况下,如果数据库提供程序支持事务,则单次的提交操 ...

  5. Mego开发文档 - 从EF6/EFCore迁移到Mego

    从EF6/EFCore迁移到Mego框架 如果您有EntityFragmework6或EntityFragmeworkCore的开发经验,在首次接触Mego框架时会发现这两个框架非常相似,本文将帮忙您 ...

  6. Mego开发文档 - 快速概述

    Mego 快速概述 Mego 是一款轻量级,可扩展和跨平台的数据访问技术. Mego 是一个对象关系映射器(O / RM),它使.NET开发人员能够使用.NET对象处理数据库.它消除了开发人员通常需要 ...

  7. Mego开发文档 - 快速开始

    Mego 快速开始 我们将创建一个简单的数据新增及查询来演示 Mego 的使用过程.演示中都是使用 Visual Studio 2017 作为开发工具,SQL Server 2012 作为数据库. 创 ...

  8. Mego开发文档 - 数据注释建模

    数据注释建模 Mego框架使用一组约定来基于CLR类来构建模型.您可以指定其他配置来补充或覆盖通过约定发现的内容. 在 Mego 中所有的数据对象必须要有主键.这里需要声明与EF不同的是框架只支持数据 ...

  9. Mego开发文档 - 数据库建模

    数据库建模 我们还提供了一些其他的特性,用于定制化数据库对应的数据结构. 表映射 框架默认会使用CLR类型名称做为实际数据库的表名,当两者不一致时可以使用该特性强制表名称. [Table(" ...

随机推荐

  1. 数据处理框架:Pig

    Pig pig 是基于hadoop的一个数据处理框架. MapReduce是使用java开发的.Pig有一套自己的数据处理语言.Pig的数据处理过程要转化为MR 来运行. Pig的数据处理语言是数据流 ...

  2. windows xp/7/8/8.1/10安全模式详解和系统修复讲解

    如果你的电脑因为各种原因(强关电脑等原因导致的电脑蓝屏,或者引导文件受损等)开不了机,进不了电脑桌面,那么就可以看看我这篇文章了. 先贴上百度百科,说得挺好的.最下面有我贴的图片操作过程详解. 百度百 ...

  3. 机器学习之类别不平衡问题 (2) —— ROC和PR曲线

    机器学习之类别不平衡问题 (1) -- 各种评估指标 机器学习之类别不平衡问题 (2) -- ROC和PR曲线 完整代码 ROC曲线和PR(Precision - Recall)曲线皆为类别不平衡问题 ...

  4. jQuery中有关mouse的事件--mousedown/up/enter/leave/over/out----2017-05-10

    mousedown:鼠标按下才发生 mouseup:鼠标按下松开时才发生 mouseenter和mouseleave效果和mouseover mouseout效果差不多:但存在区别,区别见代码解析: ...

  5. 【redis源码阅读】redis对象

    结构定义 在redis中,对象的数据结构定义如下: ​typedef struct redisObject { ​unsigned type:4; ​unsgined encoding:4; ​uns ...

  6. java容器类4:Queue深入解读

    Collection的其它两大分支:List和Set在前面已近分析过,这篇来分析一下Queue的底层实现. 前三篇关于Java容器类的文章: java容器类1:Collection,List,Arra ...

  7. Git -- 分支与合并 (命令行+可视化工具p4merge)

    基本命令 把所有的变化都放在master分支并不是最好的做法. 建议的做法是把变化放在分支里面. 至少应该准备一个feature分支之类的, 把变化都隔离开来, 然后等到所有的功能都稳定之后再合并到m ...

  8. centos7下更改docker镜像和容器的默认路径

    笔者近期在服务器上搭建docker环境,可由于笔者是普通用户,在安装的时候就跳了很多坑,现在记录一下. 一.docker权限问题 据官方解释,搭建docker环境必须使用root权限,或者sudo装, ...

  9. pureftpd支持php实现图片上传

    安装好php后,可安装pureftp工具 这里我给出一个rpm包可直接安装配置:http://pan.baidu.com/s/1i5OhS3r(包括启动脚本在内) FTP测试:安装ftp客户端,用户名 ...

  10. c++ --> 返回值分析

    返回值分析 函数不能通过返回指向栈内存的指针,返回指向堆内存的指针是可以的. 一.返回局部变量的值 可以有两种情况:返回局部自动变量和局部静态变量,比如: int func() { ; // 返回局部 ...