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设计模 ...
随机推荐
- .NET Services Stack笔记之手写版
- CF796A Buying A House 模拟
Zane the wizard had never loved anyone before, until he fell in love with a girl, whose name remains ...
- Javaweb 实现分页功能
package cn.zr.testpage.entity; public class User { private String name; private int age; private Str ...
- WebServcies 调用方法异常:System.Web.HttpRequestValidationException: 从客户端中检测到有潜在危险的 Request.Form 值。
我在做WebServcies时,页面调试,报类了下面这样的错误信息: System.Web.HttpRequestValidationException: 从客户端(checkXML="&l ...
- day22 正则表达式 re
1. 正则表达式 正则表达式是对字符串操作的一种逻辑公式. 我们一般使用正则表达式对字符串进行匹配和过滤. 工具: 各大文本编辑器⼀般都有正则匹配功能. 我们也可以去http://tool.china ...
- node js fcoin api 出现 api key check fail : {"status":1090,"msg":"Illegal API signature"}
//主区://ft / btc 不支持市价 买入数量不能小于5个FT 买//ft / eth 支持市价 最小买入eth不能小于0.01 买//ft / usdt 支持市价 最小买入usdt不能小于10 ...
- django 自带的验证功能
django.contrib.auth提供了很多验证方法 authenticate(): 提供了用户认证,在自带的数据库表中验证用户名和密码,需要username和password两个关键字参数 如果 ...
- http协议&接口规范&接口测试入门
http协议 请求: 请求行:请求方法.url(协议名://ip;端口/工程名/资源路径).协议版本 请求头 :键值对 请求正文 响应: 响应行:协议版本.响应状态码.响应状态码描述 响应头 :键值对 ...
- linux开机启动服务学习chkconfig命令
选项: --add:增加所指定的系统服务,让chkconfig指令得以管理它,并同时在系统启动的叙述文件内增加相关数据: --del:删除所指定的系统服务,不再由chkconfig指令管理,并同时在系 ...
- SpringMVC中RequetContextListener
来自:https://www.cnblogs.com/softidea/p/7068196.html 零.引言 RequetContextListener从名字结尾Listener来看就知道属于监听器 ...