silverlight   发布时间:2022-05-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了使用Entity Framework和WCF Ria Services开发SilverLight之7:多个Domain Service间共享Poco实体大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

在前两篇中,我们讲了在SL端通过Entity Framework和WCF Ria services实现联表查询,其中最关键的是为实体类中的相关属性设定为Include特性,如下: 遗憾的是,这样的实体Include只能在单个域服务间共享实体。如果你尝试撰写多个域服务,并用到关联实体,会报如下错误: The entity type 'MiniNWModel.Entities.Product' is
@H_197_18@在前两篇中,我们讲了在SL端通过Entity Framework和WCF Ria services实现联表查询其中最关键的是实体类中的相关属性设定为Include特性,如下:

@H_197_18@

使用Entity Framework和WCF Ria Services开发SilverLight之7:多个Domain Service间共享Poco实体

@H_197_18@遗憾的是,这样的实体Include只能在单个域服务间共享实体。如果你尝试撰写多个域服务,并用到关联实体,会报如下错误

The entity type 'MiniNWModel.Entities.Product' is exposed by multiple Domainservice types.
Entity types cAnnot be shared across Domainservices.	SilverlightApplicationSample
@H_197_18@有人指出,域服务上下文应该是long life的,所以整个应用程序应该只有一个域服务。不过,这难道不是有点扯吗?应用程序所支撑的数据库动辄上百张表,不同的业务范畴建立多个域服务基本是必须的。

@H_197_18@一:数据库支撑

@H_197_18@本篇所采用的数据库来自于《Entity Framework 4.1 and Poco 使用存储过程联表查询》。

@H_197_18@二:数据实体

@H_197_18@本篇共涉及两个实体,要让两个实体在多个域服务间共享彼此,必须依赖特性ExternalReference。以下是主表实体:

@H_197_18@

使用Entity Framework和WCF Ria Services开发SilverLight之7:多个Domain Service间共享Poco实体

@H_197_18@以下是从表实体:

@H_197_18@

使用Entity Framework和WCF Ria Services开发SilverLight之7:多个Domain Service间共享Poco实体

@H_197_18@一定要注意正确匹配Association,否则关联数据的时候会不正确。

@H_197_18@三:域服务

@H_197_18@两个域服务类没有任何特殊之处。唯一需要注意的是,在调试的时候我们会发现EF联表查询中得到的数据,如果不做特殊处理,从表数据全部会丢失。如下图源码:

@H_197_18@

使用Entity Framework和WCF Ria Services开发SilverLight之7:多个Domain Service间共享Poco实体

@H_197_18@在方法GetCategoryWithProductsWithID中,我们会得到从表的数据,这是EF为我们得到的,但是千万不要以为数据会被Ria service带到SL客户端。

@H_197_18@四:SL获取主从表数据

@H_197_18@如果SL的某个功能需要同时得到主从表数据,我们必须同时提供包含这两个实体的域服务,在下图代码中,我们首先创建好这两个域服务(图中1)。然后,首先我们必须获取主表数据(图中2),其次是从表数据(图中3),最后,SL客户端要指定两者的关联(图中4):

@H_197_18@

使用Entity Framework和WCF Ria Services开发SilverLight之7:多个Domain Service间共享Poco实体

@H_197_18@获取主从表的全部代码如下:

public class PrinSubVm : NotificationObject
    {
        public domainserviceCategory DomainserviceCategory { get; set; }
        public domainserviceProduct DomainserviceProduct { get; set; }

        private IList<Category> categoryWithProducts;
        public IList<Category> CategoryWithProducts
        {
            get { return categoryWithProducts; }
            set { categoryWithProducts = value; this.RaisePropertyChanged<IList<Category>>(() => this.CategoryWithProducts); }
        }

        public PrinSubVm()
        {
            DomainserviceCategory = new Web.DomainserviceCategory();
            DomainserviceProduct = new Web.DomainserviceProduct();

            //获取CategoryID(cid)为1的目录
            DomainserviceCategory.Load<Category>(DomainserviceCategory.GetCategoryWithProductsWithIDQuery(1),new Action<System.serviceModel.Domainservices.CLIENt.Loadoperation<Category>>(this.GetCategoryWithProductsWithIDCallBACk),null);

            //获取CategoryID(cid)为1的目录下的商品
            DomainserviceProduct.Load<Product>(DomainserviceProduct.GetProductsByCategoryIDQuery(1),new Action<System.serviceModel.Domainservices.CLIENt.Loadoperation<Product>>(this.GetProductsByCategoryIDCallBACk),null);

            //为多个域之间共享实体
            DomainserviceCategory.AddReference(typeof(Product),DomainserviceProduct);

        }

        void GetCategoryWithProductsWithIDCallBACk(Loadoperation<Category> arg)
        {
            CategoryWithProducts = arg.Entities as IList<Category>;

        }

        void GetProductsByCategoryIDCallBACk(Loadoperation<Product> arg)
        {
            //ProductAndCategorys = arg.Entities as IList<Product>;
        }
    }
@H_197_18@有一点我们必须注意,如果要获取从表的数据,仅获取需要的从表记录就可以了,不要加载全部记录,想想那些动辄几百万记录的业务表。SL客户端会自动根据实体的KEY值去关联。

@H_197_18@反过来,我们也可以实现从表关联主表。在这里就不一一举例了。但是最后的UI可以作为演示。

@H_197_18@

使用Entity Framework和WCF Ria Services开发SilverLight之7:多个Domain Service间共享Poco实体

@H_197_18@

使用Entity Framework和WCF Ria Services开发SilverLight之7:多个Domain Service间共享Poco实体

@H_197_18@

使用Entity Framework和WCF Ria Services开发SilverLight之7:多个Domain Service间共享Poco实体

@H_197_18@本文源码下载:SLOperation20110705.rar

大佬总结

以上是大佬教程为你收集整理的使用Entity Framework和WCF Ria Services开发SilverLight之7:多个Domain Service间共享Poco实体全部内容,希望文章能够帮你解决使用Entity Framework和WCF Ria Services开发SilverLight之7:多个Domain Service间共享Poco实体所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。