EntityModelStudio系列教程2--静态建模之实体模型设计

在EMStudio中静态建模的概念和内容是来自于UML标准的,所以EMStudio提供的静态建模的设计能力是完全可以满足开发者的设计要求的。但是与UML标准比较,EMStudio中的静态建模还存在两个不同的特色:

 1. 类与实体的概念是一致的

也就是说,在EMStudio的静态建模中类和实体是完全相同的两个概念。这与目前大部分的书籍和资料的表述是不同的。EMStudio这么做是因为定位问题,同时也给开发者提供了完成静态建模即完成数据库设计的便利。

 2. 静态建模和数据库设计高度统一

在EMStudio中静态模型的设计和数据库的设计是完全结合在一起的,开发者完全可以通过静态建模一个步骤完成两种设计工作。另一个高度结合的体出现在与,实体的继承特性在数据库设计过程中也得到充分和完善的体现。所以开发者实际上是用面向对象的方法完成数据库设计的。

下面开始具体介绍EMStudio的静态建模部分的内容。

一.创建工程及实体

1.创建新工程

首先运行EMStudio,主界面显示后从主菜单选择FileàNew Project,完成新工程的创建,工程的默认名字是“MyProject”。在实体模型视图(Entity Model)中会显示新建的工程,如下图所示:

2.定义新实体

下面开始定义一个新的实体。鼠标右击工程节点,在弹出菜单中选择:New—>Simple Entity,完成一个简单实体的定义。完成操作后实体模型视图会显示新的实体,其位置是作为工程节点的子节点,如下图所示:

展开实体Entity1节点,可以看到实体包含的内容:索引,成员(等同于字段),关系和触发器。这个一个实体和数据表应该有的一些内容。

二.实体设计器的使用

双击实体节点Entity1可以打开实体设计器,在实体设计器中可以完成与实体有关的绝大部分设计和编辑工作。双击后显示界面如下:

实体设计器通过不同Tab页来组织实体包含的不同内容。在当前显示的属性页中可以编辑实体自身的属性。我们可以将实体的名字改为一个更有实际意义的名字。点击Name属性,然后输入“Company”,按回车。这样就完成了实体名字的修改。可以观察一下,此时实体模型视图中的实体名字也显示为“Company”。其它属性介绍如下:

Comment

是对实体的说明性文字

Entity Type

实体类型。由于我们创建的是简单实体,所以这里显示的Simple。这个属性是不可修改的。另外两个类型是组合(Comb)和关系(Relation),这两种类型的实体会在后续的章节中介绍。现在先了解简单实体的内容。

IsAbstract

用于指定当前的实体是否为抽象的。

IsAECC

表示当前实体是否为一个容器实体,该属性不可修改。关于容器实体我们也是在后续相关章节中再介绍。

好,现在点击Member页,切换到实体成员的设计界面,然后点击Add按钮定义一个新的实体。操作完成后界面如下图所示:

点击Name属性,输入“CompanyName”,按回车,完成成员的名称修改操作。

除了关系和实体属性以外,成员,索引和触发器的定义和修改都是使用相同的操作方式完成的。如果要删除,那么先选中需要删除的项,然后点击Delete按钮就可以了。这里需要注意一个成员属性,那就是“Mapping Field”属性。这个属性表示当前的成员是否对应于数据表中的一个字段。如果选择是,那么在生成数据库时数据表中就会有这个字段,否则就没有,EMLib框架在完成各种ORM功能时也不会处理这个成员。

读者可以切换到索引页和触发器页,定义新的索引和触发器,看一下其中内容。读者可以发现索引和触发器的内容和Sql数据库是一致。这是因为新创建的工程默认是使用Sql数据库的。如果需要修改的话,选择主菜单:ProjectàSetting,在设置界面中修改。这个操作会在后续内容中介绍。现在选择主菜单FileàSave,完成工程的保存操作,因为后续的介绍需要使用到这个工程。

三.创建实体图和关系

1.创建实体图

鼠标右击工程节点,在弹出菜单中选择NewàEntity Diagram菜单项,完成实体图的创建。操作完成后,实体模型实体中会出现新的实体图节点,如下图所示:

鼠标右击实体图节点,在弹出菜单中选择Property菜单项。在实体图的属性编辑界面中将实体图的名字修改为Main,然后按OK按钮返回,完成实体图的改名操作。

2.定义新关系

双击实体图节点Main打开实体图,在主窗体的客户区就会显示实体图的内容。当然现在显示的实体图还没有任何内容。用鼠标在实体模型视图中选中Company实体节点,然后以Drag/Drop方式将该实体放置到在客户区打开的实体图中,Drop的位置请靠近左上角,以方便后面的操作。操作完成后的结果如下图所示:

由于关系存在于两个实体之间(当然自反关系是一个例外),所以我们还需要定义一个新的实体。在实体图工具条上选中简单实体按钮,如下图所示:

在实体图中的空白处按下鼠标左键,然后以Drag/Drop方式向右下方向拉出一个方框,再释放鼠标左键。这样就完成了一个新实体的定义,如下图所示:

请将该实体的名字改为Employee。现在就可以开始定义新的关系了,选择实体图工具条中的Composition按钮,如下图所示:

然后将鼠标键移动到Employee实体上,按下鼠标左键,以Drag方式将鼠标移动到Company实体上,然后释放鼠标左键,这样就完成了一条新关系的定义。如下图所示:

3. 修改关系的名称 

在实体图中,鼠标右击关系,在弹出菜单中选择Property菜单项,打开关系编辑界面。然后选择Name属性,将名字改为HasEmployee。

四.关系的属性

在开始介绍关系属性之前,先明确关系主方和付方的概念。从图形上来说,关系箭头所指方是关系的主方,而另一方就是关系的付方。对于刚才创建的关系来说Company实体是主方,Employee实体是付方,这表示Company实体包含1个或者多个Employee实体。关系的名称修改完成后,请展开关系属性界面中所有节点,如下图所示:

下面开始逐个介绍关系的属性,这部分的内容很重要,因为静态模型的精华是在于关系。

Comment

对关系的说明

Enable Navigate Primary

在UML标准中,关系的双方对对方的知晓(ware)往往是单向的。双向知晓会在源代码中出现互相引用的情况,这是高耦合的一个标志。所以通常的情况下这个属性一般是设置为false。但是在某些情况确实会需要互相知晓对方的情况。比如,树形控件中的父节点有子节点属性,从而父节点可以知道所有的子节点;同时子节点有一个父节点属性,从而子节点可以知道父节点。这个时候,我们就可以将该属性设置为true。

这个属性的值也会影响到EMLib的ORM操作。如果设置为true那么在级联的实体激活操作中EMLib不仅会激活实体以及付方实体,并且还会根据该属性值激活或者初始化付方实体中表示主方实体的属性。从而让付方实体可以访问到(或者说感知到)主方实体。

Foreign Key Options

这部分是与外键相关的属性。在EMStudio的静态模型中,实体间关系会以外键的方式映射到相关的数据表中。所以这个部分属性允许开发者设置外键的属性。

Foreign Key Options—Name

这个属性用于设置外键字段的名称。这是目前开发者能够修改的唯一属性。外键的类型属性是不允许修改的,EMStudio会根据当前所使用的数据库自动确定。

Minor Entity Name

付方实体的名称,在创建关系时确定,无法修改。

Minor Multiplicity

表示付方实体的数量,“1”和“0..1”表示单;“0..*”和“1..*”表示多。这和UML标准是一致的,含义也没有变化。

Minor Options

这部分的属性用于设置付方实体的内容。

Minor Options—Active

EMLib使用这个属性确定,在执行级联的激活操作中是否激活这个关系的付方实体。设置为true表示需要在级联激活中激活付方实体,false表示不激活。请将其改为true。

Minor Options—Delete

EMLib使用这个属性确定,在执行级联的删除操作中是否删除这个关系的付方实体。设置为true表示需要在级联删除中删除付方实体,false表示不删除。

Minor Options—Property Name

关系在源代码中是通过属性来体现的,在EMStudio的静态模型中这样的属性称为关系属性。关系属性出现在主方实体中,表示主方知道付方存在并可以访问。这个属性用于设置源代码中关系属性的名称。为了在生成的源代码中看到效果,请将其改为HasEmployee。

Primary Multiplicity

表示主方实体的数量,“1”和“0..1”表示单;“0..*”和“1..*”表示多。这和UML标准是一致的,含义也没有变化。

Primary Entity Name

主方实体的名称,在创建关系时确定,无法修改。

Relation Type

关系的类型,在创建关系时确定,无法修改。

最后介绍一下Enable Navigate Primary属性,请将其值改为true,然后就会出现一个新的属性:Primary Options。Enable Navigate Primary属性的值设置为true以后,表示付方实体需要感知主方实体,这在源代码中也是通过属性来实现的,这和上文提到的树形控件的作法类似。Primary Options中的属性就允许开发者设置该属性的名称。请关闭实体设计器界面,返回主界面,然后保存工程。

五.编译工程及生成源代码

1.设置源代码输出目录

在生成源代码前先确认一下源代码输出的位置。请选择主菜单ProjectàSetting菜单项,打开设置项目界面,如下图所示:

窗体中最下面那个Output Path设置项就是定义源代码的输出路径。默认是在C盘,由于在笔者的电脑上可以使用这个目录所以笔者就没有修改。请读者确认在自己电脑上运行EMStudio时,EMStudio对指定目录拥有写的权限。

2.编译工程

这一步不是必须的,因为直接生成源代码话,EMStudio也会自动先执行编译,没有错误以后才会生成源代码。请选择主菜单ProjectàCompile菜单项执行编译操作。如果读者是严格按照上述步骤做下来的话,应该是通不过编译的,会产生如下的两个错误:

第一个错误是说:实体Employee没有任何成员。请双击该错误,打开实体Employee的设计界面,然后为实体Employee定义一个新的成员,名字是MyBirthday,类型是DateTime。

第二个错误是说:连接字符串无效。请双击该错误打开设置项目界面,如前图所示。现在读者有两个选择,其一是点击“New Connection”按钮新建一个真实的连接从而得到一个连接字符串。其二是在“Connection String”文本框中输入任意非空非空格的有效字符串,比如“abc”之类的就可以。为简便起见现在先输入“abc”。

好,保存工程,再次执行编译操作,这是就应该可以成功通过编译了。在输出窗口可以看到成功信息,如下图所示:

3. 生成源代码

选择主菜单ProjectàBuild Source生成源代码。请确认在设定的源代码输出位置生成了源代码文件。

六.源代码解读

在指定的源代码输出目录中,会存在一个名为MyProject文件夹。这个名称来自于项目的工程名。请打开该文件夹,会有一个名为C#的文件夹,这表示我们生成的是C#语言的源代码。源代码的语言类别在设置项目界面中是可以修改的。请打开该目录,会看到如下所示的目录,如下图所示:

EDModel.Biz.EDCustom文件夹中文件是以实体类为单位的,一个实体对应一个文件,开发者如果需要写自己定制的代码可以写在这些文件中。在将代码添加到自己的项目中时请使用复制的方式添加,这样重复生成代码时自己写的代码就不会被覆盖。EDModel.Biz.EDExtern文件夹中两个文件。MyProject.xml称作模型文件,在初始化EMLib框架时需要这个文件。另一个是EDModel.cs文件,该文件体现了当前实体模型的静态结构。所以将该文件添加到工程时请使用引用添加,这样重复生成源代码后可以保证当前工程中是最新的代码。开发者不能修改该文件中的代码,否则会导致EMLib框架无法正常使用。

现在打开EDModel.cs文件看一下其中的内容。首先看命名空间namespace MyNamespace,这个名字是可以修改的,在主菜单ProjectàSetting菜单项,打开项目设置窗体,然后在其中编辑Namespace就可以了。MyContext这个类是用于初始化EMLib和生成EMContext对象的类,以后在介绍Eql是会提到它。这个类的名字可以在项目设置界面的Context Class Name中修改。

在MyContext类后面是若干个继承自EqlEntityMeta的类,这些类称为数据表元类。数据表元类中的成员和数据表中的字段是对应的,并且在MyContext类中会有每一个元类的成员。这样的设计是为了方便Eql的使用。如何使用Eql会在其它相关部分中再做介绍。接着元类的就是实体类了。请读者确认一下每一个实体类的成员是否和设计时定义的是一致的。由于我们定义了一个关系,所以在主方实体Company中会有关系属性HasEmployee,这个名字和设计时指定的是一致的。另外由于我们指定关系的Enable Navigate Primary属性为true,表示付方实体可以感知主方实体,所以在付方实体Employee中存在关系属性Host_Relation9,这个属性表示付方实体对应的主方实体。

在项目设置中的Entity Model设置页,有一个选项Serializable,这个设置项用于控制是否在生成的源代码中给实体类加入Serializable属性。

七.与模型相关其他一些操作

1.删除操作

在EMStudio中删除操作有两种:从模型中删除和从实体图中删除。请打开实体图,然后鼠标右击实体Employee,在弹出菜单中选择DeleteàDelete From Diagram菜单项。可以看到实体Employee从实体图中消失了,但是在实体模型视图中Employee实体还是存在的。这个意思是刚才操作只是从实体图中删除了一个表示实体的图形符号,而不是实体本身。现在选择主菜单EditàUndo菜单项(或者快捷键CTRL+Z),执行Undo操作,可以看到图形又恢复了。然后再次在实体图中右击Employee实体图形,在弹出菜单中选择菜单DeleteàDelete From Model菜单项。可以看到Employee实体从实体图和实体模型视图中都消失了。这表示实体Employee实体被真正的从模型中完全删除了,模型中已经不存在Employee这个实体了。

2.包的使用

在EMStudio中包是一种用来组织模型的工具。在实体模型视图中,用鼠标右击工程节点,在弹出菜单中选择NewàPackage菜单项就可以定义一个新的包了。EMStudio中包的含义和UML中一致。通过右击包节点,开发者可以在包内定义其它内容。

3.查找

EMStudio中查找分两种:查找和引用查找。所谓查找是一般意义上的查找,引用查找是指查找一个实体在当前的实体模型中在那些地方被引用到。先介绍查找。选择主菜单EditàFind菜单项,打开查找界面。如下图所示:

在Find what文本框中输入Com,在Search in组合框中选择Project,在Search types中只选择Entity,Match case和Match whole word复选框不要选上,然后点击Find按钮。在Find Results视图中就会显示查找结果,如下图所示:

这个结果表示实体Company在静态模型中存在于两个位置,一个是在模型MyProject的Main实体图中,另一个是在模型MyProject中。请双击第一个查找结果,实体图会被自动打开,并且实体Company在实体图中是被选中的。

在实体Employee中定义一个新的成员,名字是PreviousCompany,类型是Company类型。然后在实体模型视图中右击实体Company,在弹出菜单中选择Find All References菜单项,就会查找实体Company所有被使用到的地方,结果如下图所示:

结果表示实体Company在当前的静态模型中,在两个不同位置被使用到。读者可以双击这两个结果,实体Company被使用到的地方会自动打开。

 

本节内容到此已全部讲述完毕,如果有疑问,或者需要技术支持可以访问我们网站:http://www.WideUnion.com。提出您的问题或者在论坛中提交问题,同时我们也非常希望能听到您的建议和需求,以便我们为您提供更好的产品和服务。

转载于:https://www.cnblogs.com/WideUnion/archive/2012/09/22/2698321.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/494665.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前沿科技山雨欲来,四大领域存创新机会

来源:北极光创投摘要:最近,北极光创投董事总经理杨磊,发表了《前沿科技山雨欲来》的主题演讲,他认为目前全球正处于前沿科技爆发前夜,他看好计算构架变革、移动终端、机器人、生物科技与IT融合四大领域的创…

工业机器人发展现状:硬件制造大同小异,视觉感知绘新蓝图

来源 :亿欧摘要:8月15日-8月19日,在北京亦庄国际会展中心举办了为期五天的2018世界机器人大会。小编认为,国内工业机器人的总体水平在未来长期时间将处于稳定上升区,而两极分化趋势愈显。8月15日-8月19日,在…

[C# 网络编程系列]专题七:UDP编程补充——UDP广播程序的实现

本专题主要介绍下如何实现UDP广播的程序,下面就直接介绍实现过程和代码以及运行的结果。 一、程序实现 UDP广播程序的实现代码: using System; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading; using System.W…

我们离得开美国的软件和硬件吗?

来源:网易科技摘要:据报道,你当然可以淘汰很多美国产品,但你可能也会因此放弃许多令人惊叹的功能。据报道,你当然可以淘汰很多美国产品,但你可能也会因此放弃许多令人惊叹的功能。例如,超过10亿…

❤️❤️❤️【资料免费领取】简历模板、职场PPT模板、硬核学习资料+PDF资料(Java、Python、大数据、机器学习)❤️❤️❤️

🍅【领取方法】 长按识别二维码,回复【资料】领取 目录 1、100套小编购买的简历模板(部分截图) 2、1000套精品PPT模板(部分截图) 3、大数据-学习资料(1.3G 硬核PDF,官方指南&…

超20亿!2018年国家自然科学基金(重点项目)出炉!

来源:青塔摘要:8月16日,2018年国家自然科学基金评审结果正式揭晓。8月16日,2018年国家自然科学基金评审结果正式揭晓。继昨天发布了2018年国家优青项目各单位的立项情况后,青塔今天又整理重点项目的立项情况和完整名单…

❤️ 珊姐带你学JavaScript:数组和函数 (万文建藏)❤️

🍅 作者:阿珊 🍅 简历模板、职场PPT模板、技术交流尽管关注私聊我。 🍅 期许:欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 热门专栏推荐: 🥇 大数据集锦…

产业|中国电子学会发布《机器人十大新兴应用领域(2018-2019年)》

来源: 中国电子学会8月19日,2018世界机器人大会胜利闭幕,闭幕式上中国电子学会发布了《发布机器人十大新兴应用领域(2018-2019年)》。当前,全球正在经历科技、产业、资本高度耦合、深度迭加的新一轮变革&am…

2018-2019年新一代AI领域十大最具成长性技术展望

来源:网络大数据摘要:在2018世界机器人大会17日的主论坛上,中国电子学会发布《新一代人工智能领域十大最具成长性技术展望(2018-2019年)》。当前,全球正在经历科技和产业高度耦合、深度迭加的新一轮变革,大数据的形成、…

wzplayer for android V1.0

V1.0上图,哈哈 转载于:https://www.cnblogs.com/weinyzhou/archive/2012/10/12/2750055.html

全球公有云巨头:亚马逊 AWS

来源:乐晴智库精选摘要:亚马逊AWS目前拥有超过1500种产品和2100余种第三方模块,为全球190个国家的企业提供支持。AWS作为亚马逊旗下的云计算服务平台,面向全世界范围的用户提供包括弹性计算、存储、数据库、应用程序在内的一整套云…

❤️爆肝新一代大数据存储宠儿,梳理了2万字 “超硬核” 文章!❤️

🍅 作者:不吃西红柿 🍅 简介:CSDN博客专家🏆、信息技术智库公号作者✌。简历模板、职场PPT模板、技术难题交流、面试套路尽管【关注】私聊我。 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 如有…

埃森哲:技术改变看病的五大趋势!每个人都将受益【附下载】| 智东西内参...

来源:智东西摘要:解读五大科技趋势及其对生活的影响,盘点新兴技术对医疗健康产业的影响案例。全球医疗水准已经达到一个临界点,那就是与技术的深度碰撞,商业与个人医疗的界限在模糊。医疗机构越来越重视智能化技术的作…

《画解算法》1.两数之和【python实现】

🍅 作者主页:不吃西红柿 🍅 简介:CSDN博客专家🏆、信息技术智库公号作者✌。简历模板、职场PPT模板、技术难题交流、面试套路尽管【关注】私聊我。 🍅 欢迎点赞 👍 收藏 ⭐留言 📝…

工业AI时代,大数据云平台未来5年迎最佳发展时机

来源:专知摘要:继德国工业 4.0 的提出,中国也确立了“中国制造 2025”的目标,工业 4.0 及物联网的概念在中国大地上遍地开花,整个行业也是红红火火。从工业大数据到智能制造,工业大数据云平台将为工业创新和…

噪音 - Perlin Noise

转载自:http://www.cnblogs.com/babyrender/archive/2008/10/27/BabyRender.html 说起perlin noise, 最初也就是在课上大概了解了一下, 知道是个生成仿真贴图的东西. 学的时候没怎么细想, 只是知道这个东西很快. 生成3d贴图很方便. 不过最近在做sampling的时候, 发现…

《画解算法》2.整数反转【python-简单】

🍅 作者主页:不吃西红柿 🍅 简介:CSDN博客专家🏆、信息技术智库公号作者✌。简历模板、职场PPT模板、技术难题交流、面试套路尽管【关注】私聊我。 🍅 欢迎点赞 👍 收藏 ⭐留言 📝…

360:中国为什么没有自主研发的浏览器内核?

来源:360公司物联网智库 整理发布摘要:近日360公司发表题为《中国为什么没有自主研发的浏览器内核?》的文章,文章中写道:从0到1,从无到有,这是很多人理解的自主研发,按这个标准&…

❤️ 炒 股 实 战丨原 地 起 飞 ❤️

郑重声明: 1、个人版可以免费获取交易数据进行分析,企业级大规模调用数据需要购买积分(大家玩玩即可) 2、为避免广告代言,本文将不会出现任何logo、链接和包,需要玩的主页私聊我! &#x1f345…

人工智能研究的新前线:生成式对抗网络

林懿伦, 戴星原, 李力, 王晓, 王飞跃来源:科学网 摘要:生成式对抗网络(Generative adversarial networks, GAN)是当前人工智能学界最为重要的研究热点之一。其突出的生成能力不仅可用于生成各类图像和自然语言数据,还启…