1、创建的实体的命名空间得是MainInfo.Eshop.XX
XX为文件夹的名称,否则自动生成的代码如Service文件路径有异。
2、打开CMD输入以下内容,自动生成代码
abphelper generate crud "DictItem" -d "D:\Workpace\MainInfo.Eshop\aspnet-core" --skip-permissions --skip-db-migrations --skip-ui --skip-view-model --skip-localization --skip-test
abphelper generate crud "TradeRecord" -d "D:\Workpace\MainInfo.Eshop\aspnet-core" --skip-permissions --skip-db-migrations --skip-ui --skip-view-model --skip-localization --skip-test --custom-repository
DictItem 为实体名称
D:\Workpace\MainInfo.Eshop\aspnet-core 为你的解决方案路径,但是路径最后的一级必须是aspnet-core
路径之后的内容为选项,可以自行更改,但是以上为推荐选项
可以增加--Custom Repository ,会自动创建仓储文件,适合于业务特别复杂的实体
其他选项
3、实体是软删除还是硬删除取决于你实体继承的类是否带有Full前缀
如FullAuditedEntity<Guid>为软删除,AuditedEntity<Guid>为硬删除
4、如果你的实体中含有导航属性,自动生成的Dto文件也会照搬,但是由于Dto所在的层无法引用实体层的原因,会报错,直接删除即可。然后根据逻辑自己手动添加属性如
Public string CategoryName { get ; set ; }
5、生成代码后找到EShopDbContextModelCreatingExtensions文件,修改数据库配置。
数据库名称:在EShopConsts文件中找到合适的前缀,后加实体名称,建议使用语法糖nameof,以便以后的修改。
使用HasComment方法设置表的注释。
数据库类型:string类型的字段如果不做HasMaxLength方法的设置,在数据库中自动为longtext数据类型,占用资源过大。长度具体如何设置看FieldLengthconsts文件。
数字类型的字段有小数用decimal即可,没有小数用int,不确定是否有小数用decimal。
必填项:不能为空的字段需要加上IsRequired方法。
默认值:默认值使用HasDefaultValue方法,但是需要注意和IsRequired搭配可能会产生一些问题。
6、之前说到的导航属性是让EF自动判断外键的一种方式,如果有导航属性了就不需要做额外数据库外键配置。
如果没有自动加外键,则可以在配置文件中设置
b.HasMany(d => d.DictItems).WithOne(r => r.DictCategory);
或者
b.HasOne(d => d.DictCategory).WithMany(r => r.DictItems);
以上是一对多关系的配置。
之后会在数据库中增加外键约束。
且默认为级联删除。
7、自动生成代码会重写DbContextModelCreatingExtensions.cs文件,将里面的中文替换成乱码。同时由于我们要重写数据库设置,因此自动生成代码文件后,将对DbContextModelCreatingExtensions文件的修改撤销掉,手动增加即可。
8、decimal类型的字段数据库自动生成的数据类型为decimal(65,30),长度和精度过高,因此需要额外设置数值类型的精度和长度。
增加约束:
可以根据业务需求扩展,为求效率目前统一为decimal(10,4);
在数据库设置文件EShopDbContextModelCreatingExtensions中配置。
9、在迁移文件命名时建议加上迁移时间和次数。
10、增加表的唯一性约束。
11、增加表的自增字段。
字段必须得是int类型。