Mego开发文档 - 数据注释建模
数据注释建模
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开发文档 - 数据注释建模的更多相关文章
- Mego开发文档 - 索引
		Mego 开发文档 Mego 快速概述 主要特性 获取Mego 使用流程 模型 查询 保存数据 入门 Mego 快速开始 创建项目 安装Nuget包 创建连接字符串 创建模型及数据上下文(添加引用) ... 
- Mego开发文档 - 建模高级主题
		建模高级主题 在建模过程中我们还有许多其他情况,这里列出本框架中的有用特性来用于解决此类问题. 函数映射 我们可以将指定的CLR函数映射到数据库中的系统函数或自定义函数,该特性用于补充框架中未提供的数 ... 
- Mego开发文档 - 加载关系数据
		加载关系数据 Mego允许您使用模型中的导航属性来加载相关数据对象.目前只支持强制加载数据对象.只有正确配置了关系才能加载关系数据,相关内容可参考关系配置文档. 加载对象属性 您可以使用该Includ ... 
- Mego开发文档 - 保存关系数据
		保存关系数据 由于没有对象的更改跟踪,因此关系的操作需要开发者明确指定,在成功执行后Mego会影响到相应的关系属性中. 添加关系 在以下示例中如果成功执行则source的Customer属性会变为ta ... 
- Mego开发文档 - 数据库建模
		数据库建模 我们还提供了一些其他的特性,用于定制化数据库对应的数据结构. 表映射 框架默认会使用CLR类型名称做为实际数据库的表名,当两者不一致时可以使用该特性强制表名称. [Table(" ... 
- Mego开发文档 - 从EF6/EFCore迁移到Mego
		从EF6/EFCore迁移到Mego框架 如果您有EntityFragmework6或EntityFragmeworkCore的开发经验,在首次接触Mego框架时会发现这两个框架非常相似,本文将帮忙您 ... 
- Mego开发文档 - 快速概述
		Mego 快速概述 Mego 是一款轻量级,可扩展和跨平台的数据访问技术. Mego 是一个对象关系映射器(O / RM),它使.NET开发人员能够使用.NET对象处理数据库.它消除了开发人员通常需要 ... 
- Mego开发文档 - 快速开始
		Mego 快速开始 我们将创建一个简单的数据新增及查询来演示 Mego 的使用过程.演示中都是使用 Visual Studio 2017 作为开发工具,SQL Server 2012 作为数据库. 创 ... 
- Mego开发文档 - 基础查询
		基础查询 Mego 使用语言集成查询(LINQ)从数据库查询数据.LINQ允许您使用C#(或其他.NET语言)根据派生的上下文和实体类编写强类型查询.将LINQ查询的表示传递给数据库提供者,翻译为数据 ... 
随机推荐
- VS中使用.NET Reactor进行代码混淆
			.NET Reactor相信大家都不陌生,网上使用教程也很多.但绝大多数都只介绍到软件的使用,而对于在VS中使用介绍的不多. 首先,在.NET Reactor的Help中Add In,如下图. 重启V ... 
- handsontable 渲染实例
			单元格选择完成后将触发事件afterSelectionEnd, 然后在js中: hot.addHook('afterSelectionEnd', function(r, c, r2, c2){ // ... 
- Docker(二):Dockerfile 使用介绍
			上一篇文章Docker(一):Docker入门教程介绍了 Docker 基本概念,其中镜像.容器和 Dockerfile .我们使用 Dockerfile 定义镜像,依赖镜像来运行容器,因此 Dock ... 
- 多线程(三) java中线程的简单使用
			java中,启动线程通常是通过Thread或其子类通过调用start()方法启动. 常见使用线程有两种:实现Runnable接口和继承Thread.而继承Thread亦或使用TimerTask其底层依 ... 
- linux中的颜色控制
			\033[031m xxx \033[0m ---------------------->中间的xxx部分显示为红色,不接后面的\033[0m,则以后显示的都是红色,\033表示开始和结束 ... 
- jQuery学习笔记之extend方法小结
			在学习jQuery的时候,学习到了$.extend的主要用法,在此做一个简单的总结. (1)当只写一个对象自变量时,拓展的是jQuery的工具方法,如: $.extend({ aaa:function ... 
- 线程池ThreadPoolExecutor源码解读研究(JDK1.8)
			一.什么是线程池 为什么要使用线程池?在多线程并发开发中,线程的数量较多,且每个线程执行一定的时间后就结束了,下一个线程任务到来还需要重新创建线程,这样线程数量特别庞大的时候,频繁的创建线程和销毁线程 ... 
- 阿里云手动搭建k8s搭建中遇到的问题解决(持续更新)
			ETCD搭建 systemd启动etcd服务的时候出现错误:Failed at step CHDIR spawning /usr/bin/etcd: No such file or directory ... 
- GEETEST极验召集互联网大佬齐聚光谷,共同探讨交互安全问题
			全球互联网技术在飞速发展的同时,网络安全事件也随之频发.除了直接带来经济损失的网络恶意攻击之外,企业在多个方面也遭受着不同程度的网络恶意攻击,包括品牌形象.管理时间.企业竞争力.客户成交量.用户行为等 ... 
- 笔记:Struts2 输入校验
			Struts2的输入校验包含了客户端校验和服务器端校验,通过编写校验规则文件来实现输入校验,需要增加 Convention 插件,将 struts2-convention-plugin-2.3.31. ... 
