# DailyTest **Repository Path**: EverestVIP/daily-test ## Basic Information - **Project Name**: DailyTest - **Description**: 个人项目经验汇总 - **Primary Language**: C# - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-04-02 - **Last Updated**: 2021-04-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # DailyTest #### 介绍 个人项目经验汇总 #### 软件架构 MVVM、DDD #### 经验汇总 **一、EF** 1.复杂类型怎么用??? 默认复杂类型有以下规则: (1) 复杂类型没有主键属性 (2) 复杂类型只能包含原始属性。 (3)在其他类中使用复杂类型时,必须表示为非集合类型。 使用DbModelBuilder.ComplexType方法显示配置为复杂类型: ``` public class Custom { public Guid ID { get; set; } public string Name { get; set; } public VIPCustom VIPCustom { get; set; } } public class VIPCustom { public int VIPCustomID { get; set; } public int VIPNo { get; set; } } =============================================== modelBuilder.Entity().ToTable("Customs"); modelBuilder.ComplexType(); ``` 2. FirstCode中的数据库初始化方式 ``` Database.SetInitializer(new CreateDatabaseIfNotExists());//默认用这个 Database.SetInitializer(new DropCreateDatabaseAlways()); Database.SetInitializer(new DropCreateDatabaseIfModelChanges()); Database.SetInitializer(null);//不设置初始化策略 Database.SetInitializer(new MigrateDatabaseToLatestVersion()); ``` 3. EF设置只读实体 ``` public IDbSet ReadOnlyEntities { get { return Set(); } } ``` 4. 确认context.GetValidationErrors();的作用??? 5. Fluent API配置属性参考 [https://www.cnblogs.com/nianming/archive/2012/11/07/2757997.html#2059588860](http://www.cnblogs.com/nianming/archive/2012/11/07/2757997.html#2059588860) 6. 实体配置类可以继承下边两个类(通过Fluent API) 实体类型配置:` EntityTypeConfiguration` 复杂类型配置:` ComplexTypeConfiguration
` 7. 设置所有实体中名字为ID的属性设置为主键 `modelBuilder.Properties().Where(p => p.Name == "ID").Configure(p => p.IsKey());` 8. modelBuilder.Conventions.Add(自定义公约类,需要继承Convention); 9. 表值函数是什么,怎么用??? 10. 正确开启关闭DetectChanges可以优化EF性能。 11. 可以借助Polly库实现自定义执行策略,比简单的执行策略要好。 12. 利用Polly实现SaveChange的并发冲突的重试机制。 #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request #### 特技 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com) 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目 4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目 5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) 6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)