• (转)使用Entity Framework和WCF Ria Services开发SilverLight之1:简单模型


    原文地址:http://www.cnblogs.com/luminji/archive/2011/06/10/2077696.html

    本文目的是通过Silverlight ria service完成一次数据的读取过程,并且在此基础上建立测试项目。

    Ria service借助于WCF和ADO.NET Entity Framework构建分布式开发框架。使用它可以快速构建自己的开发模式。

    1:基础结构

    首先,创建SL APP,如下:

    image

    然后,选择创建web:

    image

    可以,也可以不勾选enable wcf ria service,如果勾选了,在SL APP中会多几个DLL的引用,其它没有任何差别。如图:

    image

    2:创建一个示例数据库

    这是一个小而轻型的数据库,在MDSN的课程中有使用到它。如下:

    3:RIA之ADO.NET ENTITY DATA MODEL

    为web创建ADO.NET ENTITY DATA MODEL,如图:

    image

    注意,习惯命名规则:Model数据库名.edmx。

    在下一步中,我们选择刚才创建的数据库:

    image

    选择新建连接,按照指示完成数据库连接配置。

    进入下一步:

    image

    在这一步中,注意一定要选择第一个红框中的内容,否则默认不能生成联表查询。在下一步中,我们选择“Generate from database”,如下:

    image

    点击Finish后,VS为我们生成了一个以edmx为后缀的文件。OK,到此暂停,我们先来看看这个edmx文件是干什么用的,为我们完成了什么工作。

    3.1:什么是EDM

    ENTITY DATA MODEL,简写为EDM,中文为实体数据模型。它由三个概念组成。概念模型由概念架构定义语言文件 (.csdl)来定义,映射由映射规范语言文件 (.msl),存储模型(又称逻辑模型)由存储架构定义语言文件 (.ssdl)来定义。这三者合在一起就是EDM模型。EDM模型在项目中的表现形式就是扩展名为.edmx的文件。

    Entity Framework实现了一套类似于ADO.NET2.0中的连接类来操作EDM完成持久化。EntityFramework中所有发往EDM的操作都是经过EntityClient,包括使用LINQ to Entity进行的操作。目前可用操作如下:

    image

    4:针对web EMD的测试

    理解了EMD在开发中所处的作用,我们就可以针对EDM来写个测试项目。为了简便期间,我们直接在EMD中的SchoolEntities类型的构造方法中直接创建测试(严格意义来说,这不是个单元测试,这仅是测试)。

    image

    针对这个操作,会在测试项目中生成一个SchoolEntitiesTest的类型,同时,在这个类型中会生成一个SchoolEntitiesConstructorTest的方法,如下:

    image

    由于我们仅仅测试EDM,而跟WEB本身没有关系,所有我们注释掉了红框中的内容。同时我们写入真正的测试代码,如下:

    image

    这里的一个小细节是,连接字符串我们通过编码的方式传入到测试方法。EDM的连接字符串和ADO.NET的连接字符串有很大不同,在这里,可公开一下我们的生成EDM连接字符串的方法:

    01public string GetConnectionString()
    02{
    03    string providerName = "System.Data.SqlClient";
    04    string serverName = "192.168.0.96";
    05    string databaseName = "mysample";
    06    SqlConnectionStringBuilder sqlBuilder = new SqlConnectionStringBuilder();
    07    sqlBuilder.DataSource = serverName;
    08    sqlBuilder.InitialCatalog = databaseName;
    09    sqlBuilder.IntegratedSecurity = false;
    10    sqlBuilder.UserID = "sa";
    11    sqlBuilder.Password = "sasa";
    12    string providerString = sqlBuilder.ToString();
    13    EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder();
    14    entityBuilder.Provider = providerName;
    15    entityBuilder.ProviderConnectionString = providerString;
    16    entityBuilder.Provider = providerName;
    17    entityBuilder.Metadata = "res://*/Modelmysample.csdl|res://*/Modelmysample.ssdl|res://*/Modelmysample.msl";
    18    return entityBuilder.ToString();
    19}

    调试我们的测试代码,最终我们会获取到数据库中的4条记录。

    image

    通过了以上的阐述,我们了解了EDM的作用,以及如何测试EDM。接下来,我们需要知道如何在SL APP中调用WEB中的EDM。

    5:Domain Service Class

    在SL APP中调用EDM是通过WEB的Domain Service Class来实现的。简单的说来,它是RIA SERVICE框架中的一个重要内容。

    在WEB选择添加新项,选择Domain Service Class,命名,下一步会出现如下界面:

    image

    我们可以做出如上勾选。确定后,编译整个解决方法,会发现目前的解决方案结构会变成如下形式:

    image

    注意,第一个红框部分,是VS自动为我们在SL APP生成的。它是第二个红框在客户端的对应版本。我们需要将它包含到项目中去。它包含了所有服务端版本类中定义的方法、实体等,而可在客户端直接调用。

    6:Ria Service数据流转

    好了,经过以上的描述我们知道了:

    EDM:直接操作数据库;

    Domain Service Class:调用EDM,并把数据接口通过WCF的形式开放给客户端;

    *.Web.g.cs:调用Domain Service Class,完成对数据的读取,并最终呈现给UI;

    7:最终展示

    在SL APP中的UI调用呈现数据。前台:

    image

    后台,直接使用*.Web.g.cs中的DomainServiceMySample 加载数据:

    public MainPage()
    {
        InitializeComponent();
        DomainServiceMySample context = new DomainServiceMySample();
        context.Load(context.GetEmpQuery());
        lb1.ItemsSource = context.emps;
    }

    最后界面显示:

    image

    8:问题

    该示例演示了使用Entity Framework和WCF Ria Services进行Silverlight开发。我们当然可以继续使用此模式完善功能,知道一个功能复杂的应用程序开发完毕。但是,当前,此示例起码存在如下几个问题。

    1:实体模型被紧耦合在EDM中,同时它不能项目(模块)使用。随着每一次更新EDM,实体模型会被覆盖;

    2:EDM和BLL紧耦合在一起;

    3:没有提炼出数据接口,导致我们没有办法在此示例中进行单元测试。示例中虽然存在测试项目,但那是数据库相关的,达不到单元测试的要求;

    下篇我们将继续重构该示例,以逐步解决这些问题。

    本示例源码下载:SilverlightApplicationSchool20110612.zip

  • 相关阅读:
    基于jeesit下的工作流开发步骤
    SQL Server DBA SQL
    SQL Server 全文索引的硬伤
    SQL Server全文搜索
    数据库SQL优化大总结之 百万级数据库优化方案2
    百倍性能的PL/SQL优化案例(r11笔记第13天)
    SQL优化 · 经典案例 · 索引篇
    数据库SQL优化大总结之 百万级数据库优化方案
    pytest文档23-使用多个fixture和fixture直接互相调用
    pytest文档22-fixture详细介绍-作为参数传入,error和failed区别
  • 原文地址:https://www.cnblogs.com/fcsh820/p/2096177.html
Copyright © 2020-2023  润新知