Mego开发文档 - 建模高级主题
建模高级主题
在建模过程中我们还有许多其他情况,这里列出本框架中的有用特性来用于解决此类问题。
函数映射
我们可以将指定的CLR函数映射到数据库中的系统函数或自定义函数,该特性用于补充框架中未提供的数据库函数交互。
public class OrderManageEntities : DbContext
{
public OrderManageEntities(string name)
: base(name)
{ }
[DbFunction("GetSno")]
public int GetSno()
{
throw new NotImplementedException();
}
}
通常我们会在LINQ表达式中使用这些函数,框架会将其应用到所提交的SQL语句中。
继承
我们与EF同样支持数据对象继承,在继承的数据对象中一条数据会被垂直分割成多个表存储,在使用过程中框架会透明化这一组装过程。例如下面代码所示,创建一组有继承关系的数据对象:
public class MyContext : DbContext
{
public DbSet<Blog> Blogs { get; set; }
public DbSet<RssBlog> RssBlogs { get; set; }
}
public class Blog
{
public int BlogId { get; set; }
public string Url { get; set; }
}
[Table(nameof(RssBlog), true)]
public class RssBlog : Blog
{
public string RssUrl { get; set; }
}
关系
关系就是指对象中的复杂对象或集合属性,本框架与EF中的关系是有区别的。EF中强调关系的成对出现,这是由于数据库关系的思想决定的。然而Mego更接近与对象化逻辑,我们只关心当前对象中某个对象或集合属性所关联的对象,以及这两个对象建立关系的主外键,因此在Mego中没有EF中的一对一,一对多,多对多的关系的概念,我们使用三种数据注释来描述所有的关系。
1. 情况一
通常两个数据对象的关系是A对象中记录了B对象的主键,这时就可以在A对象建立一个对象属性指向B对象。
public class OrderDetail
{
public int Id { get; set; }
public int OrderId { get; set; }
[ForeignKey("OrderId", "Id")]
public virtual Order Order { get; set; }
}
2. 情况二
通常两个数据对象的关系是B对象中记录了A对象的主键,这时就可以在A对象建立一个集合属性指向B对象。
public class Order
{
public int Id { get; set; }
[InverseProperty("OrderId", "Id")]
public virtual ICollection<OrderDetail> Details { get; set; }
}
3. 情况三
这种情况是为了应对更复杂的情况,它有别于上面两种情况,A对象和B对象在逻辑上有关系,但是在数据层面是没有任何关联,他们的关系被存储在第三个C对象中,例如下面的代码示例:
public class Order
{
public int Id { get; set; }
[Relationship(typeof(OrderDetail), "OrderId", "Id", "ProductId", "Id")]
public virtual ICollection<Product> Products { get; set; }
}
Mego开发文档 - 建模高级主题的更多相关文章
- Mego开发文档 - 索引
Mego 开发文档 Mego 快速概述 主要特性 获取Mego 使用流程 模型 查询 保存数据 入门 Mego 快速开始 创建项目 安装Nuget包 创建连接字符串 创建模型及数据上下文(添加引用) ...
- Mego开发文档 - 复杂查询
复杂查询 Mego 还支持一些更高级的LLINQ查询写法,本文只列出一部分. 分组汇总查询 using (var db = new OrderManageEntities()) { var query ...
- Mego开发文档 - 数据注释建模
数据注释建模 Mego框架使用一组约定来基于CLR类来构建模型.您可以指定其他配置来补充或覆盖通过约定发现的内容. 在 Mego 中所有的数据对象必须要有主键.这里需要声明与EF不同的是框架只支持数据 ...
- Mego开发文档 - 数据库建模
数据库建模 我们还提供了一些其他的特性,用于定制化数据库对应的数据结构. 表映射 框架默认会使用CLR类型名称做为实际数据库的表名,当两者不一致时可以使用该特性强制表名称. [Table(" ...
- Mego开发文档 - 快速概述
Mego 快速概述 Mego 是一款轻量级,可扩展和跨平台的数据访问技术. Mego 是一个对象关系映射器(O / RM),它使.NET开发人员能够使用.NET对象处理数据库.它消除了开发人员通常需要 ...
- Mego开发文档 - 快速开始
Mego 快速开始 我们将创建一个简单的数据新增及查询来演示 Mego 的使用过程.演示中都是使用 Visual Studio 2017 作为开发工具,SQL Server 2012 作为数据库. 创 ...
- Mego开发文档 - 基础查询
基础查询 Mego 使用语言集成查询(LINQ)从数据库查询数据.LINQ允许您使用C#(或其他.NET语言)根据派生的上下文和实体类编写强类型查询.将LINQ查询的表示传递给数据库提供者,翻译为数据 ...
- Mego开发文档 - 加载关系数据
加载关系数据 Mego允许您使用模型中的导航属性来加载相关数据对象.目前只支持强制加载数据对象.只有正确配置了关系才能加载关系数据,相关内容可参考关系配置文档. 加载对象属性 您可以使用该Includ ...
- Mego开发文档 - 基本保存操作
基本保存操作 在Mego中没有更改跟踪,也就是说所有的新增.更新及删除都需要开发者自行判断.Mego会最为实际的将各个数据操作提交给数据库并执行. 添加数据 using (var db = new O ...
随机推荐
- RedHat 7.3 更新yum源
title: RedHat 7.3 更新yum源 time: 2018.3.15 查看所有yum包 [root@bogon ~]# rpm -qa | grep yum yum-rhn-plugin- ...
- 深入解析条件变量(condition variables)
深入解析条件变量 什么是条件变量(condition variables) 引用APUE中的一句话: Condition variables are another synchronization m ...
- 关于win8/win8.1系统不能调节亮度的解决办法
有时候我们重装了win8系统之后开始可以调节亮度,但是再重新安装了显卡驱动之后发现不能调节亮度了,解决办法就是添加一项注册表. 下载地址:http://7xnarc.com1.z0.glb.cloud ...
- python笔记之函数
函数 >>> def funTest(param1): ... 'this is function document string.' #正文需要有缩进 ... return par ...
- IPFS和竞争对手们(二)
在上一篇<IPFS和竞争对手们(一)>的开头抱怨的IPFS的开发进度,今天才得知 MaidSafe 是从2006年起步的( )这进度也是醉了. 接上一篇,今天继续讲IPFS的竞争对手们 图 ...
- SpringtMVC中配置 <mvc:annotation-driven/> 与 <mvc:default-servlet-handler/> 的作用与源码解析
基于 Spring4.X 来学习 SpringtMVC, 在学习过程中,被"告知"在 XML 配置文件中建议设置如下两项: 一直不明白为什么,但又甘心.于是,花了一点时间来调试源码 ...
- K-Means 聚类
机器学习中的算法主要分为两类,一类是监督学习,监督学习顾名思义就是在学习的过程中有人监督,即对于每一个训练样本,有对应的标记指明它的类型.如识别算法的训练集中猫的图片,在训练之前会人工打上标签,告诉电 ...
- Lombok介绍、使用方法和总结
1 Lombok背景介绍 官方介绍如下: Project Lombok makes java a spicier language by adding 'handlers' that know how ...
- MYSQL数据库学习十七 日志管理
17.1 MySQL软件所支持的日志 MySQL所支持的日志文件里,除了二进制日志文件外,其他日志文件都是文本文件.默认情况下,MySQL只会启动错误日志文件,其他日志文件则需要手动启动. 二进制日志 ...
- Python类中的self到底是干啥的
Python类中的self到底是干啥的 Python编写类的时候,每个函数参数第一个参数都是self,一开始我不管它到底是干嘛的,只知道必须要写上.后来对Python渐渐熟悉了一点,再回头看self的 ...