数据注释建模

Mego框架使用一组约定来基于CLR类来构建模型。您可以指定其他配置来补充或覆盖通过约定发现的内容。

在 Mego 中所有的数据对象必须要有主键。这里需要声明与EF不同的是框架只支持数据注释的语法来构建模型,在框架自动发现后,只有通过其他接口才能更改模型定义,我们使用一种简单直接的方式来声明,例如:

public class Blog
{
[Key]
public int BlogId { get; set; } public string Url { get; set; }
}

常用的数据注释特性类都在

using Caredev.Mego.DataAnnotations;

命名空间下。

主键约定

我们约定一个名为Id或<type name>Id将被配置为当前数据对象的主键属性。

class Car
{
public string Id { get; set; } public string Make { get; set; }
public string Model { get; set; }
}
class Car
{
public string CarId { get; set; } public string Make { get; set; }
public string Model { get; set; }
}

您可以使用数据注释强制一个或多个属性为主键。以下为单个主键和复合主键的示例:

class Car
{
[Key]
public string LicensePlate { get; set; } public string Make { get; set; }
public string Model { get; set; }
}
public class Warehouse
{
[Key, Column(nameof(Id), Order = 1)]
public int Id { get; set; }
[Key, Column(nameof(Number), Order = 2)]
public int Number { get; set; } public string Name { get; set; }
public string Address { get; set; }
}

如果您声明数据对象为复合主键。

自增列

有不少数据库是支持标识列(自增列),使用该特性可以声明一个属性受数据库自增列控制,同时可以指定自增的起始及步长。

public class Blog
{ [Identity(1, 1)]
public int BlogId { get; set; } public string Url { get; set; }
}

排除属性

您可以指定数据对象中某个属性不参与映射,补充如果某个属性为只读属性框架会自动将它排除,这与强制声明排除特性效果相同。

public class Blog
{
public int BlogId { get; set; }
public string Url { get; set; } [NotMapped]
public DateTime LoadedFromDatabase { get; set; }
}

并发控制

与EF相同,本框架支持乐观并发,您可以声明一个或多个属性参与提交时并发检查。

public class Person
{
public int PersonId { get; set; } [ConcurrencyCheck]
public string LastName { get; set; } public string FirstName { get; set; }
}

可为空属性

指示当前属性是否可以为空。

public class Blog
{
public int BlogId { get; set; } [Nullable(false)]
public string Url { get; set; }
}

长度

配置长度向数据存储提供关于用于给定属性的适当数据类型的提示。最大长度仅适用于数组或可变长度的数据类型,例如byte[]。

public class Blog
{
public int BlogId { get; set; } [Length(500, false)]
public byte[] Image { get; set; }
}

字符串

在CLR中的字符串类型将会映射到数据库中的多种字符串存储类型,该特性可确定对应的实际类型。例如下面代码中声明Url属性在SQL Server数据库中的类型为nvarchar(500)。

public class Blog
{
public int BlogId { get; set; } [String(500, false)]
public string Url { get; set; }
}

精度

用于配置存精度信息的数据类型列,例如decimal。

public class Product
{
public int Id { get; set; } [Precision(12,4)]
public decimal Price { get; set; }
}

[文档目录]

Mego开发文档 - 数据注释建模的更多相关文章

  1. Mego开发文档 - 索引

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

  2. Mego开发文档 - 建模高级主题

    建模高级主题 在建模过程中我们还有许多其他情况,这里列出本框架中的有用特性来用于解决此类问题. 函数映射 我们可以将指定的CLR函数映射到数据库中的系统函数或自定义函数,该特性用于补充框架中未提供的数 ...

  3. Mego开发文档 - 加载关系数据

    加载关系数据 Mego允许您使用模型中的导航属性来加载相关数据对象.目前只支持强制加载数据对象.只有正确配置了关系才能加载关系数据,相关内容可参考关系配置文档. 加载对象属性 您可以使用该Includ ...

  4. Mego开发文档 - 保存关系数据

    保存关系数据 由于没有对象的更改跟踪,因此关系的操作需要开发者明确指定,在成功执行后Mego会影响到相应的关系属性中. 添加关系 在以下示例中如果成功执行则source的Customer属性会变为ta ...

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

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

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

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

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

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

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

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

  9. Mego开发文档 - 基础查询

    基础查询 Mego 使用语言集成查询(LINQ)从数据库查询数据.LINQ允许您使用C#(或其他.NET语言)根据派生的上下文和实体类编写强类型查询.将LINQ查询的表示传递给数据库提供者,翻译为数据 ...

随机推荐

  1. VS中使用.NET Reactor进行代码混淆

    .NET Reactor相信大家都不陌生,网上使用教程也很多.但绝大多数都只介绍到软件的使用,而对于在VS中使用介绍的不多. 首先,在.NET Reactor的Help中Add In,如下图. 重启V ...

  2. handsontable 渲染实例

    单元格选择完成后将触发事件afterSelectionEnd, 然后在js中: hot.addHook('afterSelectionEnd', function(r, c, r2, c2){ // ...

  3. Docker(二):Dockerfile 使用介绍

    上一篇文章Docker(一):Docker入门教程介绍了 Docker 基本概念,其中镜像.容器和 Dockerfile .我们使用 Dockerfile 定义镜像,依赖镜像来运行容器,因此 Dock ...

  4. 多线程(三) java中线程的简单使用

    java中,启动线程通常是通过Thread或其子类通过调用start()方法启动. 常见使用线程有两种:实现Runnable接口和继承Thread.而继承Thread亦或使用TimerTask其底层依 ...

  5. linux中的颜色控制

    \033[031m  xxx  \033[0m  ---------------------->中间的xxx部分显示为红色,不接后面的\033[0m,则以后显示的都是红色,\033表示开始和结束 ...

  6. jQuery学习笔记之extend方法小结

    在学习jQuery的时候,学习到了$.extend的主要用法,在此做一个简单的总结. (1)当只写一个对象自变量时,拓展的是jQuery的工具方法,如: $.extend({ aaa:function ...

  7. 线程池ThreadPoolExecutor源码解读研究(JDK1.8)

    一.什么是线程池 为什么要使用线程池?在多线程并发开发中,线程的数量较多,且每个线程执行一定的时间后就结束了,下一个线程任务到来还需要重新创建线程,这样线程数量特别庞大的时候,频繁的创建线程和销毁线程 ...

  8. 阿里云手动搭建k8s搭建中遇到的问题解决(持续更新)

    ETCD搭建 systemd启动etcd服务的时候出现错误:Failed at step CHDIR spawning /usr/bin/etcd: No such file or directory ...

  9. GEETEST极验召集互联网大佬齐聚光谷,共同探讨交互安全问题

    全球互联网技术在飞速发展的同时,网络安全事件也随之频发.除了直接带来经济损失的网络恶意攻击之外,企业在多个方面也遭受着不同程度的网络恶意攻击,包括品牌形象.管理时间.企业竞争力.客户成交量.用户行为等 ...

  10. 笔记:Struts2 输入校验

    Struts2的输入校验包含了客户端校验和服务器端校验,通过编写校验规则文件来实现输入校验,需要增加 Convention 插件,将 struts2-convention-plugin-2.3.31. ...