Entity Framework 6.x 学习之 - 创建带连接表的实体模型 with Database First

1. 创建数据库表

CREATE TABLE [Album]
(
[AlbumId] [int] NOT NULL IDENTITY(1, 1),
[AlbumName] [varchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL
) ON [PRIMARY]
GO
ALTER TABLE [Album] ADD CONSTRAINT [PK_Album] PRIMARY KEY CLUSTERED  ([AlbumId]) ON [PRIMARY]
GO

CREATE TABLE [Artist]
(
[ArtistId] [int] NOT NULL IDENTITY(1, 1),
[FirstName] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL,
[MiddleName] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL,
[LastName] [varchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL
) ON [PRIMARY]
GO
ALTER TABLE [Artist] ADD CONSTRAINT [PK_Artist] PRIMARY KEY CLUSTERED  ([ArtistId]) ON [PRIMARY]
GO

CREATE TABLE [LinkTable]
(
[ArtistId] [int] NOT NULL,
[AlbumId] [int] NOT NULL
) ON [PRIMARY]
GO
ALTER TABLE [LinkTable] ADD CONSTRAINT [PK_LinkTable] PRIMARY KEY CLUSTERED  ([ArtistId], [AlbumId]) ON [PRIMARY]
GO
ALTER TABLE [LinkTable] ADD CONSTRAINT [FK_LinkTable_Album] FOREIGN KEY ([AlbumId]) REFERENCES [Album] ([AlbumId])
GO
ALTER TABLE [LinkTable] ADD CONSTRAINT [FK_LinkTable_Artist] FOREIGN KEY ([ArtistId]) REFERENCES [Artist] ([ArtistId])
GO

Create Table

表关系图:

2. 创建实体模型,如图

备注:明明选了3个表,为什么只有2个实体呢?

因为中间那个表为连接表,所以在映射实体的时候只有2个实体,这种情况叫 no payload 。

为什么连接表不会被创建成一个实体呢?

因为他没有自己的主键,如果给链接表加一个主键,那么创建的实体模型就会和数据库表关系一样,一个一个的对应上。

3. 操作实体类

 1 using System;
 2
 3 namespace ConsoleApplication3
 4 {
 5     class Program
 6     {
 7         static void Main(string[] args)
 8         {
 9             //Insert
10             using (var context = new test2Entities())
11             {
12                 //添加一个艺术家属于2个专辑
13                 var artist = new Artist { FirstName = "Alan", LastName = "Jackson" };
14                 var album1 = new Album { AlbumName = "Drive" };
15                 var album2 = new Album { AlbumName = "Live at Texas Stadium" };
16                 artist.Albums.Add(album1);
17                 artist.Albums.Add(album2);
18                 context.Artists.Add(artist);
19
20                 //添加一个专辑有2个艺术家
21                 var artist1 = new Artist { FirstName = "Tobby", LastName = "Keith" };
22                 var artist2 = new Artist { FirstName = "Merle", LastName = "Haggard" };
23                 var album = new Album { AlbumName = "Honkytonk University" };
24                 artist1.Albums.Add(album);
25                 artist2.Albums.Add(album);
26                 context.Albums.Add(album);
27
28                 context.SaveChanges();
29             }
30
31             //Select
32             using (var context = new test2Entities())
33             {
34                 Console.WriteLine("艺术家和他们的专辑...");
35                 var artists = context.Artists;
36                 foreach (var artist in artists)
37                 {
38                     Console.WriteLine("{0} {1}", artist.FirstName, artist.LastName);
39                     foreach (var album in artist.Albums)
40                     {
41                         Console.WriteLine("\t{0}", album.AlbumName);
42                     }
43                 }
44
45                 Console.WriteLine("\n专辑中的艺术家...");
46                 var albums = context.Albums;
47                 foreach (var album in albums)
48                 {
49                     Console.WriteLine("{0}", album.AlbumName);
50                     foreach (var artist in album.Artists)
51                     {
52                         Console.WriteLine("\t{0} {1}", artist.FirstName, artist.LastName);
53                     }
54                 }
55             }
56             Console.ReadKey();
57         }
58     }
59 }

输出:

程序运行3次后的数据库表结果:

Entity Framework 6.x 学习之 - 创建带连接表的实体模型 with Database First,布布扣,bubuko.com

时间: 2024-10-27 11:10:56

Entity Framework 6.x 学习之 - 创建带连接表的实体模型 with Database First的相关文章

Entity Framework Code First学习系列

Entity Framework Code First学习系列目录 Entity Framework Code First学习系列说明:开发环境为Visual Studio 2010 + Entity Framework 5.0+MS SQL Server 2012,在数据库方面Entity Framework Code First在Entity Framework 5.0仅支持MS SQL Server数据库.在接下来的随笔中,均使用项目名称为Portal的控制台应用程序为例.具体的系统学习目

关于Entity Framework采用DB First模式创建后的实体批量修改相关属性技巧

Entity Framework采用DB First模式创建实体是比较容易与方便的,修改已创建的实体在个数不多的情况下也是没问题的,但如果已创建的实体比较多,比如10个实体以上,涉及修改的地方比较多的时候,那么这个时候采用可视化编器就不再那么方便了,而应该采用以XML的形式来呈现实体数据,然后用我们常用的编辑手段,复制.粘贴.剪切来快速实现批量修改,下面就来说说批量修改的方法: 1.找到Entity Framework采用DB First模式创建的文件,文件以.edmx结尾,如下图示: 2.选中

Entity Framework with MySQL 学习笔记一(安装)

声明 :  数据库是Mysql,本人的程度只到会写sql语句(不会储蓄过程), c# 会基本的ADO.NET数据库访问,LINQ基础. 这篇只做个人学习|温习作用. 新手可以参考,也请高手指正错误, 感恩. Entity Framework (缩写EF) 是微软的一个框架.作用是处理面向对象与关系数据库的映射问题. 以往我们都是ADO.NET来访问数据库,connection.open() -> sql command ->  executenonquery | dataReader ->

Entity Framework 6.1 学习系列1--概况、安装

http://blog.csdn.net/huohaitao/article/details/24025293 Entity Framework:实体框架,看名字就知道是针对模型数据的.这是MS推出的一款ORM工具. 与NHibernate比较 1)Entity Framework封装性更好,增.删.改.查询更方便 2)  Entity Framework使用更方便的Linq to Entity查询,延迟加载(只有在需要时才加载,只加载需要的数据). 3)开发效率很高,使用DBFirst几乎不用

Entity Framework Code First 学习

必备条件 要完成本演练,需要安装 Visual Studio 2010 或 Visual Studio 2012 或者更高. 如果使用的是 Visual Studio 2010,还需要安装 NuGet. 1.创建应用程序 简单起见,我们将构建一个使用 Code First 执行数据访问的基本控制台应用程序. 打开 Visual Studio “文件”->“新建”->“项目…” 从左侧菜单中选择“Windows”和“控制台应用程序” 输入 EntityFrameworkStudy 作为名称 选择

使用Entity Framework通过code first方式创建数据库和数据表

开发环境 WIN10 Entity Framework6.0  MVC5.0  开发工具 VS2015  SqlServer2012 1.创建上下文Context继承DbContext,并创建其他的业务类,这些业务类会创建对应的数据表. 1 public class AccountContext:DbContext 2 { 3 public AccountContext():base("AccountContext") { } 4 public DbSet<SysUser>

Entity Framework with MySQL 学习笔记一(继承)

基本上sql中要表示继承关系有3中方式. 分别是,1表继承(TPH),2表继承(TPC),3表继承(TPT) 1表 : Person id type name classroom office 1 student  keat       1B null 2      teacher  xinyao    null  Lv2-T2 好处是不用 inner join 快,坏处是null 很多,浪费空间, column很长不好看. 2表: 这个很瞎不要学 .. , 大概就是没有父表,字表很多,但是每个

在Entity Framework 中实现继承关系映射到数据库表

继承关系映射到数据库表中有多种方式: 第一种:TPH(table-per-hiaerachy) 每一层次一张表 (只有一张表) 仅使用名为父类的类型名的一张表,它包含了各个子类的所有属性信息,使用区分列(Disciriminator column)(通常内容为子类的类型名)来区分哪一行表示什么类型的数据. 第二种:TPT(Table-per-type) 每种类型都有一张表(父类及每个子类都有表) 父类.各子类各自都有一张表.父类的表中只有共同的数据,子类表中有子类特定的属性.TPT很像类的继承结

Entity Framework with MySQL 学习笔记一(查看EF和SQL记入)

做数据库的一向来都会很注意请求的次数还有语句.这关系到很多性能的问题. 因此在使用EF的时候如果不了解原理很可能会搞出很糟糕的请求. 所以呢,在还没有搞懂EF前最基本的是你得"看得见",EF为我们生成了什么样的 SQL语句,和访问了多少次SQL 其实有很多很好的工具可以实现这些东西,但是我懒的去找来试,所以呢找了一个简单又勉强可以用用的. 这个是微软本身的日志 参考 : http://msdn.microsoft.com/en-us/data/jj556606 -Logging Dat