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 ...
随机推荐
- onmouse事件
常用的鼠标事件:onmouseenter,onmouseleave,onmouseover,onmouseout,onmouseup,onmousedown,onmousewheel,onmousem ...
- C++对一组pair数据进行排序(sort函数的使用)
最近在写一个算法的时候,把一些数据存在了pair中,并且需要根据pair中first或者second的值对这些数据进行排序.比如:输入数据(1,2).(4,2).(3,3).(2,1)根据first的 ...
- MVC4不支持EF6解决方案 && Nuget控制台操作说明
问题背景:MVC4不支持EF6,所以要把EF6卸载然后安装EF5.只能降低版本EF5+MVC4或者EF6+MVC5; 这时候: Uninstall-Package EntityFramework -F ...
- phpstorm激活码生成器地址
http://idea.qinxi1992.cn/ 写在windows/system32/drivers/etc/hosts里 0.0.0.0 account.jetbrains.com 激活码位置: ...
- 员工选票系统-java
Yuangong.java package com.toupiao; public class Yuangong { private String name; private int piao; pu ...
- nodejs加密Crypto简单例子
加密技术通常分为两大类:“对称式”和“非对称式”. 对称式加密: 就是加密和解密使用同一个密钥,通常称之为“Session Key ”这种加密技术在当今被广泛采用,如美国政府所采用的DES加密标准就是 ...
- 基于hi-nginx的web开发(python篇)——utf-8编码
一致地utf-8编码,非常重要.对python2而言,尤其如此. 如果在hi-nginx中使用的是python2,同时又需要无障碍地使用中日韩等文字,那么一定不要忘记使用: #-*- coding:u ...
- 【ASP.NET Core】如何隐藏响应头中的 “Kestrel”
全宇宙人民都知道,ASP.NET Core 应用是不依赖服务器组件的,因此它可以独立运行,一般是使用支持跨平台的 Kestrel 服务器(当然,在 Windows 上还可以考虑用 HttpSys,但要 ...
- SQL注入之Sqli-labs系列第一篇
在开始接触渗透测试开始,最初玩的最多的就是Sql注入,注入神器阿D.明小子.穿山甲等一切工具风靡至今.当初都是以日站为乐趣,从安全法实施后在没有任何授权的情况下,要想练手只能本地环境进行练手,对于sq ...
- [HNOI2002]营业额统计_Treap
[HNOI2002]营业额统计 题目大意:给你一串n数序列,对于每一个刚输入的数a,找到一个前面的数k,使得|a-k|最小. 注释:$n<=32767,ai<=10^6$. 想法:刚学Tr ...