数据表&实体
创建数据表
请根据业务需求创建对应的数据表,这里不举例,只说几点要求:
- 【强制】字段名只允许 英文字母数字和下划线,不允许用界定符包含特殊符号
- 【必须】为每个数据表创建 主键(聚集索引)
- 【必须】主键必须是 单个字段,禁止使用复合主键,建议采用自增 int/long 列
- 【必须】如果需要保证数据行不重复,需要创建一个GUID的 唯一索引
- 【禁止】定义无【无符号】数字类型的 字段 (MySQL)
- 【建议】增加必要的 冗余字段 降低查询的复杂度
- 【建议】所有字段建议 NOT NULL
- 【建议】字段名和表名避开数据库的关键字,例如:server, database
- 【建议】根据业务需求识别经常要查询的字段,创建必要的普通索引
其它要求及建议可参考:数据库设计规范
生成实体类型
数据表对应的实体类型请用工具来生成,不要手写代码!
然后将实体代码复制到Data项目即可。
注意:请根据具体的项目及目录,保留命名空间。
Data项目说明
- 它是一个类库项目,
- 必须按下面方式 添加一个AssemblyInfo.cs
// ###################################
// EntityAssembly 标记这个程序集包含数据实体的定义
// ###################################
// 这个标记将告诉Nebula启动时搜索程序集中定义的实体类型,
// 并为它们生成代理类型。
// 如果实体没有代理类型,将不能使用Nebula中一些高级的数据访问功能。
// 再说一遍:包含实体的程序集一定要加这个标记!
[assembly: ClownFish.Data.EntityAssembly]
Entity & DTO
一些原则和技巧:
- Entity(数据实体)类型与一个数据表对应
- 无法与数据表匹配的数据结构请使用 DTO
- [DbColumn]既可用于 Entity,也可用于 DTO
- 数据库字段名和 .NET类型的属性名称不一样,可用 [DbColumn(Alias = "xxx")] 来设置映射别名
- 数据库字段名和.NET类型的属性名映射时,不区分大小写