none
DomainServices 如何返回自定义实体 RRS feed

  • 问题

  • public class DictionaryItem
      {
        
        [Key]
        public int Id { get; set; }
        public String Name { get; set; }
      }
     
    public IQueryable<DictionaryItem> GetDictionaryItemData()
        {
          ObjectQuery<DictionaryItem> dicData = new ObjectQuery<DictionaryItem>(
            "select value row(c.id,c.name) from Categories as c", this.ObjectContext);
          
          return dicData;
        }
    DictionaryItem 是一个自定义的类,我想把查出来的数据以DictionaryItem类型传到sl端。上面的代码无法实现转换。
    或者有其它的方法实现这种功能也可以。
    请各位大侠指教。
    2010年5月9日 10:18

答案

  • 你这个query是否正确呢?

     ObjectQuery<DictionaryItem> dicData = new ObjectQuery<DictionaryItem>(
            "select value row(c.id,c.name) from Categories as c", this.ObjectContext);
    你可以直接用Entity Framework执行这个吗?

    为什么要 用ObjectQuery呢?

    你可以直接这样:

    public IQueryable<DictionaryItem> GetDictionaryItemData()
        {

           return  this.ObjectContext.Categories.Select(p => new DictionaryItem{Id = p.Id, Name = p.Name}).AsQueryable<DictionaryItem>();  

        }

     

    • 已标记为答案 蔡风 2010年5月11日 3:21
    2010年5月10日 19:24

全部回复

  • 你这个query是否正确呢?

     ObjectQuery<DictionaryItem> dicData = new ObjectQuery<DictionaryItem>(
            "select value row(c.id,c.name) from Categories as c", this.ObjectContext);
    你可以直接用Entity Framework执行这个吗?

    为什么要 用ObjectQuery呢?

    你可以直接这样:

    public IQueryable<DictionaryItem> GetDictionaryItemData()
        {

           return  this.ObjectContext.Categories.Select(p => new DictionaryItem{Id = p.Id, Name = p.Name}).AsQueryable<DictionaryItem>();  

        }

     

    • 已标记为答案 蔡风 2010年5月11日 3:21
    2010年5月10日 19:24
  • 你好!

    我按照你的方法

    public IQueryable<DictionaryItem> GetDictionaryItemData()
            {

                return this.ObjectContext.Categories.Select(p => new DictionaryItem { Id = p.CategoryID, Name = p.CategoryName }).AsQueryable<DictionaryItem>();

            }

    但是在前台取到的数据条数为0;

    本人刚学Ria,所以对这方面还不了解。其实我的目的是:把查出来的数据,以自定义的类(DictionaryItem)的形式返回到sl端。

    不知你有没有相关的例子,或是资料。

    谢谢了。

    2010年5月11日 1:01
  • 这个方法是推荐的方法,你在client端得到什么错误了吗?

    2010年5月11日 1:12
  •  

    在client端是没有错误,只是取到的记录数为0; this.ObjectContext.Categories表里面是有记录的。

    client端代码:DomainService1 ds = new DomainService1();                

    IEnumerable<DictionaryItem> dis = ds.Load(ds.GetDictionaryItemDataQuery()).Entities;

     

    为何取到的记录数为0?

    2010年5月11日 1:21
  • Async!!!
    2010年5月11日 1:29
  • 不好意思,刚没拷全。

    client端:            DomainService1 ds = new DomainService1();                
                IEnumerable<DictionaryItem> dis = ds.Load(ds.GetDictionaryItemDataQuery()).Entities;
                    foreach (DictionaryItem di in dis)
                    {
                        int id = di.Id;
                    }

    记录数还是0;

    是不是这样取数的?

    2010年5月11日 1:39
  • 你这个query是否正确呢?

     ObjectQuery<DictionaryItem> dicData = new ObjectQuery<DictionaryItem>(
            "select value row(c.id,c.name) from Categories as c" , this .ObjectContext);
    你可以直接用Entity Framework执行这个吗?

    为什么要 用ObjectQuery呢?

    你可以直接这样:

    public IQueryable<DictionaryItem> GetDictionaryItemData()
        {

           return   this.ObjectContext.Categories.Select(p => new DictionaryItem{Id = p.Id, Name = p.Name}).AsQueryable<DictionaryItem>();  

        }

     


    按这种方法是可以取到数的。

    之前获取时,是因为数据还没有加载。

    能否说一下这个数据是什么时候加载的?或是哪有资料看一下?谢谢了

    2010年5月11日 3:25
  • 你至少应该先试一个普通的例子。

    RiaService所有的操作都是Async完成的,所以你或者要在Completed event中来查看数据,或者要用Binding来自动更新。

     

    2010年5月11日 5:08
  • 为什么没加自定义实体之前好好的,随便加了个自定义实体之后就啥都不行了,我用的是visual studio 2008  sp1
    2010年5月11日 6:50
  • 你这个自定义实体,是建在哪?新建的一个类,还是在实体模型里?有和数据库中的表对应吗?

    public class DictionaryItem
     {
      
      [Key]
      public int Id { get; set; }
      public String Name { get; set; }
     }
     
    


    这个是我自己定义的类。
    2010年5月11日 6:56
  • 没有,因为我比较懒,就在实体模型里加了个,代码是自动生成的,难道真的要自己加?看到微软自动生成的那一坨,没有任何想法。。。
    2010年5月11日 6:59
  • 具体报什么错误?以及你的实体,贴出来看看。
    2010年5月11日 7:11
  • 算了,据说这是这个版本的bug, 我按你的做可以啊,其实你这样挺方便的,放在DomainService里面。

    2010年5月11日 7:22