数据注释建模

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. mysql压缩包安装方式

    从官网https://dev.mysql.com/downloads/mysql/上下载mysql-5.6.31-winx64.zip,将其解压,接下来的安装是通过命令来安装MySQL数据库的.(P. ...

  2. NancyFX 第五章 Nancy 路由

    在Nancy中,最为神奇的莫过于路由了,定义路由模块是构成Nancy应用的骨架.在Nancy中定义路由,和在 ASP.NET MVC那些类似的框架中有着非常大的区别. 以 ASP.NET MVC 为例 ...

  3. ORACLE之莫名---ORA-02290: 违反检查约束条件

    最近碰到一个十分棘手的问题,Java程序插入空数据到oracle时报ORA-02290: 违反检查约束条件(XXXX.×××××),这明显是在设置不可为空的字段上插入为空内容导致,但是检查数据库表后发 ...

  4. 转: web 页面加载速度优化实战-100% 的飞跃提升

    前言 一个网站的加载速度有多重要? 反正我相信之前来 博主网站 的人至少有 50% 在加载完成前关闭了本站. 为啥捏? 看图 首页完整加载时间 8.18s,看来能进来看博主网站的人都是真爱呀,哈哈. ...

  5. Problem : 1013 ( Digital Roots )

    tips:分析不够仔细,白费了许多功夫.输入数据的范围,平时几乎很少考虑的,这个以后得注意.代码检查不够仔细啊,以后得注意了 #include<iostream> using namesp ...

  6. mysql备份并转移数据

    一.使用mysqldump进行备份 直接输入命令mysqldump会发现提示命令不存在,是由于系统默认会查找/usr/bin下的命令,如果这个命令不在这个目录下, 自然会找不到命令,并报错.知道了问题 ...

  7. NGUI_Label

    五.Label是标签,一般是用来显示文字使用,当然NGUI的扩展性很强,可以通过添加相关的控件组成组合控件来进行复杂功能的使用. 1. 设置字体:可以设置NGUI中的字体,也可以设置Unity中的字体 ...

  8. TypeScript入门(二)函数新特性

    一.TypeScript-Rest and Spread操作符 用来声明任意数量的方法参数  ...args中的...就是Rest and Spread操作符. 例1: 声明一个可以传任意数量的参数进 ...

  9. 笔记:Struts2 的 JSON 插件

    安装插件,将其复制到Web应用的WEB-INF/lib 目录下 Struts2-json-plugin-2.3.16.3.jar json-lib-2.3-jdk15.jar commons-bean ...

  10. logback读取src/test/resource下的配置文件

    import java.io.File; import java.net.URISyntaxException; import java.util.Map; import java.util.Prop ...