EF--payload or not
负载加载非负载加载适用于多对多场境。
一、非负载(payload-free)加载
1.1创建表
create table Album
(
AlbumId int primary key identity(1,1),
AlbumName varchar(20)
) create table Artist
(
ArtistId int identity(1,1) primary key,
FirstName varchar(20),
MiddleName varchar(20),
LastName varchar(20)
) create table LinkTable
(
ArtistId int ,
AlbumId int ,
primary key (ArtistId, AlbumId),
foreign key (ArtistId) references Artist(ArtistId),
foreign key (AlbumId) references Album(AlbumId)
)
1.2、添加项目及数据实体对象
新建控制台项目,使用DBFirst添加生成Model对象,生成对象时选择添加的表。实体添加后如下
非负载(payload)加载时中间表LinkTable除了主键没有多余属性,EF不会将这类表生成实体而是做为实体关系生成。
1.3、数据操作
操作代码:
class Program
{
static void Main(string[] args)
{
using (var context = new EF6RecipesEntities())
{
//Artist对应多个Album
var artist = new Artist { FirstName = "Alan", LastName = "Jackson" };
var album1 = new Album { AlbumName = "Drive" };
var album2 = new Album { AlbumName = "Live at " };
artist.Albums.Add(album1);
artist.Albums.Add(album2);
context.Artists.Add(artist); // Album对应多个Artist
var artist1 = new Artist { FirstName = "Tobby", LastName = "Keith" };
var artist2 = new Artist { FirstName = "Merle", LastName = "Haggard" };
var album = new Album { AlbumName = "Honkytonk" };
artist1.Albums.Add(album);
artist2.Albums.Add(album);
context.Albums.Add(album);
context.SaveChanges(); Console.WriteLine("Artists and their albums");
var artists = context.Artists; foreach (var item in artists)
{
Console.WriteLine("{0}{1}", item.FirstName, item.LastName);
foreach (var album_temp in item.Albums)
{
Console.WriteLine("\t{0}", album_temp.AlbumName);
}
} Console.WriteLine("Artists and their albums");
var Albums = context.Albums; foreach (var item_temp in Albums)
{
Console.WriteLine("{0}", item_temp.AlbumName);
foreach (var art_temp in item_temp.Artists)
{
Console.WriteLine("\t{0}{1}", art_temp.FirstName, art_temp.LastName);
}
} Console.ReadKey();
}
}
}
运行结果如下:
二、负载(payload-rich)加载
2.1 修改表
继续使用上面的项目,删除重建LinkTable表,并清除旧数据。
--删除重建关联表
drop table linkTable
create table LinkTable
(
ArtistId int ,
AlbumId int ,
comment varchar(200),
primary key (ArtistId, AlbumId),
foreign key (ArtistId) references Artist(ArtistId),
foreign key (AlbumId) references Album(AlbumId)
)
--清空旧数据
delete from Album
delete from Artist
2.2重新生成Model实体
在项目打开实体视图,删除所有已添加的对象。再右键 选择从数据库更新模型。选择表生成后实体关系如下。
由于中间表有标量属性comment,所以EF在生成实体时会连接表做为实体生成,并且生成两个一对多关系。
2.3数据操作
class Program
{
static void Main(string[] args)
{
using (var context = new EF6RecipesEntities())
{
//Artist对应多个Album
var artist = new Artist { FirstName = "Alan", LastName = "Jackson" };
var album1 = new Album { AlbumName = "Drive" };
var linkTab = new LinkTable { Album = album1, Artist = artist, comment = "Comment1" }; var album2 = new Album { AlbumName = "Drive album2" }; linkTab = new LinkTable { Artist = artist, Album = album2, comment = "Comment2" }; context.Artists.Add(artist);
context.SaveChanges(); context.LinkTables.Add(linkTab);
context.SaveChanges(); foreach (var item in context.Artists)
{
Console.WriteLine("{0}{1}", item.FirstName, item.LastName);
foreach (var table in item.LinkTables)
{
Console.WriteLine("\t{0}{1}", table.comment, table.Album.AlbumName);
}
} Console.ReadKey();
}
}
}
2.4运行结果
2.5 最佳实践
负载(payload-rich)情形下,为了适应扩展和对应关系,这种情况下中间表设置自己的主键。
EF--payload or not的更多相关文章
- %E3%80%90%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B%E3%80%91
"%3Cdiv%20class%3D%22htmledit_views%22%20id%3D%22content_views%22%3E%0A%20%20%20%20%20%20%20%20 ...
- EF 5 最佳实践白皮书
Performance Considerations for Entity Framework 5 By David Obando, Eric Dettinger and others Publish ...
- 隐写技巧——利用JPEG文件格式隐藏payload
0x00 前言 继续对图片隐写技巧的学习,这次是对JPEG文件格式的学习和理解.同PNG文件的格式对比,JPEG文件相对简单,读取其中隐藏payload的方式大同小异,两者区别在于文件格式不同,可供利 ...
- 1.8 收集的XSS Payload
收集的XSS Payload ,可以做成字典,到时候批量测试:--------------------------------------------------------------------- ...
- 你必须知道的EF知识和经验
注意:以下内容如果没有特别申明,默认使用的EF6.0版本,code first模式. 推荐MiniProfiler插件 工欲善其事,必先利其器. 我们使用EF和在很大程度提高了开发速度,不过随之带来的 ...
- 采用MiniProfiler监控EF与.NET MVC项目(Entity Framework 延伸系列1)
前言 Entity Framework 延伸系列目录 今天来说说EF与MVC项目的性能检测和监控 首先,先介绍一下今天我们使用的工具吧. MiniProfiler~ 这个东西的介绍如下: MVC Mi ...
- 采用EntityFramework.Extended 对EF进行扩展(Entity Framework 延伸系列2)
前言 Entity Framework 延伸系列目录 今天我们来讲讲EntityFramework.Extended 首先科普一下这个EntityFramework.Extended是什么,如下: 这 ...
- EntityFramework之DetectChanges's Secrets(三)(我为EF正名)
前言 对于应用程序开发者来说,通常不需要考虑太多对于Entity Framework中的变更追踪(change tracking),但是变更追踪和DetectChanges方法是栈的一部分,在这其中, ...
- ASP.NET从零开始学习EF的增删改查
ASP.NET从零开始学习EF的增删改查 最近辞职了,但是离真正的离职还有一段时间,趁着这段空档期,总想着写些东西,想来想去,也不是很明确到底想写个啥,但是闲着也是够 ...
- 使用EF CodeFirst 创建数据库
EntityFramework 在VS2015添加新建项时,选择数据->ADO.NET 实体数据模型,有一下选项 来自数据库的EF设计器,这个就是我们最常用的EntityFramework设计模 ...
随机推荐
- 「BZOJ3065」带插入区间第K小值 替罪羊树×线段树
题目描述 从前有\(n\)只跳蚤排成一行做早操,每只跳蚤都有自己的一个弹跳力\(a_i\).跳蚤国王看着这些跳蚤国欣欣向荣的情景,感到非常高兴.这时跳蚤国王决定理性愉悦一下,查询区间\(k\)小值.他 ...
- [USACO09OPEN]牛的数字游戏Cow Digit Game 博弈
题目描述 Bessie is playing a number game against Farmer John, and she wants you to help her achieve vict ...
- Jenkins的Pipeline脚本在美团餐饮SaaS中的实践(转)
一.背景 在日常开发中,我们经常会有发布需求,而且还会遇到各种环境,比如:线上环境(Online),模拟环境(Staging),开发环境(Dev)等.最简单的就是手动构建.上传服务器,但这种方式太过于 ...
- Codeforces Round #529 (Div. 3) C. Powers Of Two
http://codeforces.com/contest/1095/problem/C 题意:给n找出k个2的幂,加起来正好等于n.例如 9,4:9 = 1 + 2 + 2 + 4 思路:首先任何数 ...
- Go语言基础之12--Channel
一.不同goroutine之间如何进行通讯? 1.全局变量和锁同步 缺点:多个goroutine要通信时,定义太多的全局变量(每个全局变量功能不一样),不好维护 2.Channel 二.channel ...
- 编译安装libimobiledevice
在windows上大家可以使用iTunes来与iPhone进行通信,但是Linux上没有这类的官方软件,所以一些爱好者就破解了iTunes的通信协议,然后在Linux上实现了该协议,也就是libimo ...
- Linux内核模块简单示例
1. Linux 内核的整体结构非常庞大,其包含的组件也非常多,使用这些组件的方法有两种: ① 直接编译进内核文件,即zImage或者bzImage(问题:占用内存过多) ② 动态添加 * 模块本身并 ...
- 一个基于QT简单登录对话框
1. 登录对话框式样 2. QLoginDialog.h #ifndef DIALOG_H #define DIALOG_H #include <QtGui/QDialog> #inclu ...
- 微软原版SQL Helper
代码 Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-- ...
- 1.搭建JavaEE开发环境
1.Web应用介绍: 2.Servlet简介 3.JSP简介 4.Servlet容器 Web服务器有静态资源和动态页面,静态资源是*.html(文件系统),动态页面是Servlet容器. 5.Tomc ...