none
关于使用Ria Service时的架构问题 RRS feed

  • 问题

  • 两种方案:

    1.使用系统默认的结构,新建数据库,加表,然后添加EF,然后添加DomainService选择表,生成类        似public class AccountsDomainService :  LinqToEntitiesDomainService<xxxEntities>

    这样的,然后所有的逻辑都在SL端操作。

    以上是我的认识,有几个疑问,所有逻辑都要在SL端写么?如果我想在后端对应的方法上写上些逻辑,是不是要在生成的AccountsDomainService 对应的

    方法中写,可是如果这样,在重新生成这个文件后原来的修改就会丢失还要重新去写?另一个问题是我如果想处理一些数据缓存方面,我要在哪里控制?

    2.自定义DomainService,生成类似这样的public class AccountsDomainService :  DomainService

    然后我在AccountRepository里面去写逻辑,这样的结构比较方便控制,可是如果这样我就要维护很多DTO,因为EF生成的MODEL里面的Entities里面

    是没有[Key]的,如果我想使用EF MODEL里面的Entities怎么办?

    我试着这样写public class AccountsDomainService :  LinqToEntitiesDomainService<xxxEntities> 然后里面的方法自己写,如

     public Accounts AccountRegister(string email,string pwd)

       {
            return _accountRepository.AccountRegister(email, pwd);
       }
     这样一般的Entities都可以使用了,可是有些功能不能用,如有外键关系的,比如我在后端的返回是
     var a = ent.Accounts.Include("Banks").Include("AppSettings").FirstOrDefault(c => c.Email == _UserID && c.Password == Pwd);
     这里的a在查询后是包括Banks,AppSettings的,可是在SL端得到的只是Accounts表的基本字段,也就是说在SL端的a.Banks,a.AppSettings都是null,而且
     有一个问题就是只有用到的表SL端才会有,也就是说在逻辑中没有使用过Banks,在SL端想通过Accounts.Banks这样是点不出Banks的。
     如果只能传这样的对象那就太麻烦了,而且这么写时,想传DTO,会提示
     The property 'QiBoooApp.Web.DomainServices.DTOs.AccountDto.AccountID' is marked as a key property, but it's not serializable.
     Are you missing DataMemberAttribute?	QiBoooApp
     我的DTO是这么定义的:
     [global::System.Runtime.Serialization.DataContractAttribute(IsReference = true)]
        [global::System.Serializable()]
        public class AccountDto 
        {
            [Key]
            public Guid AccountID { getset; }
            public Accounts Account { getset; }
            public Banks Bank { getset; }
            public AppSettings AppSetting{get;set;}
        }
     
    望大虾们给我点思路,谢谢
    • 已编辑 seeseason 2010年9月18日 5:44 修改格式
    2010年9月18日 5:43

答案

全部回复