EF实体间多对多的关系
来源:互联网 发布:淘宝开内衣店店铺简介 编辑:程序博客网 时间:2024/05/20 17:42
添加一个活动类Activity,跟旅行类Trip是多对多的关系。这个也不难理解:一个旅行有多个活动,一个活动可以属于多个旅行。
/// <summary> /// 活动类 /// </summary> public class Activity { public int ActivityId { get; set; } //[Required, MaxLength(50)] public string Name { get; set; } public List<Trip> Trips { get; set; } //和Trip类是多对多关系 }
跟之前的一样在BreakAwayContext类里添加Activity类,让数据库上下文知道Activity类:
public DbSet<CodeFirst.Model.Activity> Activitys { get; set; }
同时在Trip旅行类里添加上导航属性,形成跟Activity活动类的多对多关系
public List<Activity> Activitys { get; set; }
ok,已经可以了,跑下程序得到如下数据库:
可以看出,EF里的多对多关系是由第三张表来连接两个表的。ActivityTrips表连接了Activityes表和Trips表。表名列名都是默认命名,都可以自己配置。文章的开头已经说了那么多了,多对多肯定是用HasMany和WithMany方法,在ActivityMap类里写下如下Fluent API:
this.HasMany(a => a.Trips).WithMany(t => t.Activitys).Map(m => { m.ToTable("TripActivities"); //中间关系表表名 m.MapLeftKey("ActivityId"); //设置Activity表在中间表主键名 m.MapRightKey("TripIdentifier"); //设置Trip表在中间表主键名 });
同样也可以在TripMap里配置,顺序不一样罢了:
this.HasMany(t => t.Activities).WithMany(a => a.Trips).Map(m => { m.ToTable("TripActivities"); //中间关系表表名 m.MapLeftKey("TripIdentifier"); //设置Activity表在中间表的主键名 m.MapRightKey("ActivityId"); //设置Trip表在中间表的主键名 });
两种配置任选其一就可以了,重新跑下程序就可以了。都配置好了在程序里如何读取这个对多对的数据呢,简单写一句:
var tripWithActivities = context.Trips.Include("Activities").FirstOrDefault();
是不是也需要考虑性能的问题呢?如果只需要修改主表的某个列,那贪婪加载出相关联的从表数据做什么?会发送很多冗余的sql到数据库。当然如果要根据主表找从表数据的话,这么加载也是好事,超级方便。
阅读全文
0 0
- EF实体间多对多的关系
- Entity Framework(EF) Code First 多对多关系的实体增,删,改,查操作全程详细示例
- [C#/.NET]Entity Framework(EF) Code First 多对多关系的实体增,删,改,查操作全程详细示例
- EF里实体关系配置的方法
- EF中对一个或多个实体验证失败
- EF异常:对一个或多个实体的验证失败
- EF异常:对一个或多个实体的验证失败
- EF异常:对一个或多个实体的验证失败
- 一个双实体多对多关系的操作
- 数据库实体间多对多关系处理
- Silverlight中利用EF处理多对多关系的增删改查的解决办法
- 经验总结18--EF修改关系,多对多
- 使用ibatis映射实体间一对多、多对一的关系
- EF里一对一、一对多、多对多关系的配置和级联删除
- EF Codefirst 多对多关系 操作中间表的 增删改查(CRUD)
- Hibernate -- 映射实体关联关系(多对多关联关系)
- Hibernate实体关系映射——双边的多对一、一对多关系
- hibernate实体关系映射——单边的多对多关系
- 用qgis把遥感图像tiff文件切割出来还是tiff文件
- 回顾大一·C语言编程2.3(5)
- android 7.0 拍照 适配
- CListCtrl控件导出Excel格式文件
- 3.1、操作系统(作业、进程、线程、内存管理、垃圾回收)
- EF实体间多对多的关系
- 极乐技术周报(第二十八期)-极乐科技(www.dreawer.com)出品
- MySQL 修改数据表-添加删除列
- 回顾大一·C语言编程2.3(6)
- 自动化测试 之 “好用例、坏用例”
- asp.net控件GridView入门基础
- 自我参考-Java基础
- hdu 1285 确定比赛名次
- 设置滚动条样式