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查询的表示传递给数据库提供者,翻译为数据 ...
随机推荐
- C# Redis实战(五)
五.删除数据 在C# Redis实战(四)中讲述了如何在Redis中写入key-value型数据,本篇将讲述如何删除Redis中数据. 1.void Delete(T entity);删除函数的运用 ...
- 在Vue.js2.0中组件模板子元素数量问题
在Vue中当利用组件进行开发时候,组件所使用的模板只可以应用于一个根实例,当你需要添加多个子元素的时候,可以用一个div将它们包裹起来,代码如下: <template id="task ...
- js 标签云
以前只看到wordpress上面有个标签云的效果挺6,就好奇的弄个试试,还好网上有很多小伙伴的分享了,借鉴过来了 哈哈 html代码 <!DOCTYPE html> <html&g ...
- Centos网口流量实时监控
iptraf方式 [root@kazihuo ~]# yum -y install iptraf [root@kazihuo ~]# iptraf-ng-ng 开启服务日志: 进入细节监控后提示日志路 ...
- 笔记:Hibernate 数据库方言表
关系数据库 方言 DB2 org.hibernate.dialect.DB2Dialect DB2 AS/400 org.hibernate.dialect.DB2400Dialect DB2 OS/ ...
- 谁说 JavaScript 简单的?
这里有一些 Javascript初学者应该知道的技巧和陷阱.如果你已经是专家了,顺便温习一下. Javascript也只不过是一种编程语言.怎么可能出错嘛? 1. 你有没有尝试给一组数字排序? Jav ...
- Spring基于注解开发异常
基于注解开发: 一开始:用的jar包: 百度查到: 导入aop包: 没用 有的说: Spring版本和jdk版本不匹配 于是我换成了4.0版本 导入的jar包: 还是报错. 解决办法:添加spring ...
- 构造函数与析构函数(construction undergoing)
构造函数和析构函数 一.构造函数: 1.普通构造函数:在对象被创建时利用特定的值构造对象,将对象初始化到一个特定的状态. 特性:构造函数的函数名和类名相同:没有返回值:在对象被创建时被自动调用:如果有 ...
- 【总结】关于YUV-RGB格式转换的一些个人理解
这段时间一直在研究YUV的格式问题例如YUV422.YUV420,在网上搜索了很多这方面的资料,发现很多资料讲的东西是重复的,没有比较深入的讲解,所以看了之后印象不是很深,过了一段时间之后又对它们有了 ...
- Beta冲刺 第二天
Beta冲刺 第二天 1. 昨天的困难 由于前面的冲刺留下的问题很多,而且混乱的代码给我们接下来的完善工作带来了巨大的困难. 2. 今天解决的进度 潘伟靖: 1.对代码进行了review 2.为系统增 ...