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设计模 ...
随机推荐
- CF671A Recycling Bottles 计算几何
It was recycling day in Kekoland. To celebrate it Adil and Bera went to Central Perk where they can ...
- kuangbin专题七 HDU1754 I Hate It (单点修改维护最大值)
很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少. 这让很多学生很反感. 不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问.当然,老师有 ...
- IO流图
1.InputStream类是字节输入流的抽象类,是所有字节输入流的父类,InputStream类具有层次结构如下图所示: 2.Reader类是字符输入流的抽象类,所有字符输入流的实现都是它的子类. ...
- sklearn.metrics.roc_curve使用说明
roc曲线是机器学习中十分重要的一种学习器评估准则,在sklearn中有完整的实现,api函数为sklearn.metrics.roc_curve(params)函数. 官方接口说明:http://s ...
- 【转】Automated Testing Detail Test Plan
Automated Testing Detail Test PlanAutomated Testing DTP Overview This Automated Testing Detail Test ...
- Java类成员变量、普通成员变量、初始化块、构造方法的初始化和执行顺序
结论:执行的大致顺序如下, (1) 在一个不存在继承的类中:初始化static变量,执行static初始化块-->初始化普通成员变量(如果有赋值语句),执行普通初始化块-->构造方法 (2 ...
- svg 日常操作
创建svg 文件 <svg> </svg> 详解viewBox SVG Viewport.View Box和preserveAspectRatio 形状 标签内的值可以是百 ...
- C语言中函数声明、形参、实参
函数原型: 原型prototype是函数的声明:描述了函数的返回值与参数: 函数原型说明了两点: 1.该函数的返回值 2.该函数的参数及其类型 ++++++++++++++++++++++++++++ ...
- Ubuntu 14.04下MySQL服务器和客户端的安装
下面进行简单的配置 安装完成后通过修改/etc/mysql/my.cnf(此文件为mysql的配置文件).将文件中的binding-address=127.0.0.1注释掉.其它配置根据需要更改. H ...
- hive 存储格式及压缩
-- 设置参数 set hivevar:target_db_name=db_dw; use ${hivevar:target_db_name}; -- 创建textfile表 create table ...