之前EF一直有性能问题以及使用便利性问题, 终于到了EF6有了Migrations之后, 小弟也决定加入EF阵营了.
在学习FluentAPI配置关系的时候, 发现网上的好几个教程实际上博主自己都没有搞明白, 或者说博主自己的理解有偏差, 还好小哥一般不轻易相信别人......
终于在最后看到一篇对关系解释比较客观, 引导性重于强定义的文章. 考虑到广大网友可能会被之前那些文章带偏. 我这里整理了一下我自己的理解, 同时也将这篇好文章转出来.
所有的配置代码均写到 产品FluentAPI 中
目标对象 | 关系对象 | 关系 | 方向 | 目标代码 | 关系代码 |
产品 | 保修卡 | 1共1 | ←→ | Entity | Entity |
说明书 | 1-?1 | → | ID? Entity |
||
合格证 | 1-1 | → | ID Entity |
||
图片 | 1-?N | ←→ | List<Entity> | ID Entity |
|
标签 | ?N-?N | ←→ | List<Entity> | List<Entity> | |
?N-?N | → | List<Entity> |
关系 | 说明 |
1共1 | 相同编号, 共享编号 |
1-?1 | 不同编号, 单向, 可选 内容极少的说明书, 直接印刷到产品身上, 没有单独纸质说明书 |
1-1 | 不同编号, 单向, 必要 |
1-?N | 必要 |
?N-?N | 必要(可选) |
?N-?N | 单向 |
关系 | code |
1共1 | HasRequired.WithRequiredPrincipal |
1-?1 | HasOptional.WithMany.HasForeignkey |
1-1 | HasRequired.WithMany.HasForeignkey |
1-?N | HasMany.WithRequired.HasForeignkey |
?N-?N | HasMany.WithMany.Map(ToTable(Name)|LeftKey|RightKey) |
?N-?N | HasMany.WithMany(无参).Map(ToTable(Name)) |
PS:
Include(预加载): 因为EF默认启用"延迟加载", 所以有时根据业务要用到"预加载"
TPH TPT TPC: 这个可能不好记, 我是这样记的, TP(回城卷) + HTC(手机), H(整合保存), T(拆分保存), C(然并卵)
ComPlexType(复杂对象): 将类化整为零
最后, 给出参考文章链接:http://www.cnblogs.com/lsxqw2004/archive/2015/08/07/4701979.html