3.1 在2.2创建的EntityDesigns工程中,新建一个名为ClassDiagram.cd的类图文件。注:如果您的IDE不支持类图设计,或者您更习惯写代码,您也可以参照下面的步骤直接创建代码。
3.2为EntityDesigns工程添加到dist目录下的NBear.Common.Design.dll的引用。因为下面的每一个设计实体接口必须继承自NBear.Common.Design.Entity这个接口。在Entities工程中创建一个名为UserName的struct包含FirstName和LastName两个string类型的Field。同时在Entities工程中创建一个名为UserStatus的枚举类型,包含两个枚举选项:Availale和Deleted。注:这两个类型将用于后面的设计实体的设计。之所以这两个类型定义在Entities工程中而不是EntityDesigns工程中是,最终,所有生成的实体将放在Entities工程,且Entities工程最后对EntityDesigns工程是没有依赖关系的。
3.3 双击ClassDiagram.cd打开设计界面,您现在就可以设计实体了。注意,所有的设计实体必须是接口。为了使用3.2创建的类型,需要让Entit一Designs工程引用Entities工程。
3.4 向类图中添加一个User接口,继承自NBear.Common.Design.Entity。添加属性ID,Name,Status和Birthday。类型分别为Guid、UserName、UserStatus和DateTime?。注意,这里的Name和Status的类型为3.2创建的自定义符合类型UserName和枚举类型UserStatus。而Birthday属性的类型为一个Nullable类型的DateTime?。注意DateTime后面的问号,表示这个类型实际是一个Nullable<DateTime>,也就是说,Birthday类型如果不赋初始值的话,它的值为null。
3.5 向类图中再添加一个LocalUser接口,继承自NBear.Common.Design.Entity。添加属性LoginName和Password。类型都为string。
3.6 从工具栏添加继承线条,让LocalUser继承User。
3.7 向类图中添加一个UserProfile接口,继承自NBear.Common.Design.Entity。添加属性ID,UserID和ProfileContent。类型分别为Guid,Guid和string。注:这里的ProfileContent仅仅象征型的代表profile数据,用于演示1对1关联,实际的项目中可能会有更多属性。
3.8 从工具栏添加关联线条,让User包含一个名叫Profile的UserProfile类型的属性。这样我们就1对1关联了User和UserProfile实体。注:如果操作图形设计界面觉得麻烦,也可以切换到源代码界面,直接编码。
3.9 向类图中添加一个LocalUserPhone接口,继承自NBear.Common.Design.Entity。添加属性ID,UserID,Description,Number。类型分别为Guid,Guid,string和string。
3.10 从工具栏添加关联线条,让LocalUser包含一个名叫Phones的类型为LocalUserPhone[]的数组类型的属性。这样我们就1对多关联了LocalUser和UserPhone。
3.11 向类图添加一个Group接口,继承自NBear.Common.Design.Entity。添加属性ID,Name。类型分别为Guid和string。
3.12 从工具栏添加关联线条,让User包含一个名叫Groups的类型为Group[]的数组类型的属性。注意,这里我们要实现的是多对多关联,所以下面我们还要建一个UserGroup关联实体来连接这个多对多关系。
3.13 向类图添加一个UserGroup接口,继承自NBear.Common.Design.Entity。添加属性UserID和GroupID。类型都是Guid。
设计完的实体关系图,应该类似下面这样: