← 返回所有博客文章

这篇博客将通过一个新建的WinForms工程中实际应用C1DataSource for Entity Framework产品。对已经熟悉C1DataSource控件和新建实体模型的人,这里所谈的内容绝不陌生,同时还有让人感兴趣的内容。我们将建立只有一个窗体的简单应用,该应用提供对Northwind贸易公司所有订单的拖拽浏览并显示订单细节的功能。对于整个实现无须写一行代码!

最开始请在Visual Studio中新建并保存一个工程。即使还未对工程做任何修改也请进行保存,这样可以避免在未保存工程中创建实体数据模型时那些恼人的警告信息。

按如下步骤新建实体数据模型。

右击solution explorer中的项目并选择Add-New Item添加新内容。在随后打开的对话框中,选择“ADO.Net Entity Data Model.”EF6.X要求.Net 4.5及以上的版本。 

Entity Data Model向导会随之打开。在显示出的第一个对话框中选择 “Generate from Database.”


 
然后设置连接数据库的字串(同时选定将其存储到工程的配置文件中).


 
现在需要选择希望创建的数据模型对应的Entity Framework版本。请选择Entity Framework 6.0.


 
然后选择对应数据库中你希望建模的对象(此处我们直接选定数据库中的所有表)。


 
模型随之创建,相应图表显示在Visual Studio中。请保存并构建工程。下面我们还需要进行一些操作让该模型与C1DataSource可以协同工作。
 


如图所示:
1处:在solution explorer处点击工具栏相应图表以显示当前项目中所有文件。
2处:展开model1.edmx的子节点。
3处:删除Model1.Context.tt文件。
4处:删除Model1.tt文件。
5处:右击模型图表在弹出菜单中选择“Add Code Generation Item...”

在 Add Code Generation Item对话框开启后选择你想使用的代码生成工具。此处我们选择了下图标记1处的“ComponentOne EF 6.x DbContext Generator.”


 
注意:如果希望使用ObjectContext而非ObjectContext可以选择上图的标记为2的选项:“EF 6.x EntityObject Generator.”。这个并没有在Visual Studio中默认安装,该插件可在此处免费获取:
http://visualstudiogallery.msdn.microsoft.com/site/search?query=EF%20EntityObject&f%5B0%5D.Value=EF%20EntityObject&f%5B0%5D.Type=SearchText&ac=5
请确认已在上述两种中作出选择。

现在直接重构应用就将获得一个适合C1DataSource控件的实体数据模型。

要完成该应用我们现在转到设计窗口,打开默认窗体Form1。从工具箱中拖拽C1DataSource添加到窗体中(之后它会显示在窗体下的托盘中)。右击C1DataSource组件并选定context菜单中的属性。
1处:在此处下拉菜单中选定相应实体模型的名字(图中名为
NorhtwinEntities)。
2处:双击其右侧默认值打开 ViewSourceCollection编辑框。
 


之前使用过C1DataSource控件,只要将属性名从ObjectContextType 变到ContextType。这再次证明C1DataSource同时适用于最初的 ObjectContext 和如今的新式DbContext。可以自行选择使用哪种模型类型。
 


上图1处:选定EntitySetName中的Orders并点击确定。

最后向窗体中添加两个FlexGrids控件,层叠放置,并在其下放置C1DbNavigator设置成下述属性:
C1FlexGrid1 

DataSource C1DataSource1
DataMember Orders

ControlHandler on C1DataSource1:  AutoLookup

True

C1FlexGrid2

DataSource C1DataSource1
DataMember Orders

ControlHandler on C1DataSource1:  AutoLookup

True

C1DbNavigator1

DataSource C1DataSource1
DataMember Orders

保存,构建并运行应用。请注意设置使通过C1DbNavigator选定的订单下方的框格会自动显示订单具体信息。同时也请注意在表格显示顾客和产品名字的方式上,对于从其他表中抽取的信息我们要设置ControlHandler中的AutoLookup属性为True。

到此,文本结束,完全未敲一行代码就轻松完成整个工作。