2012-04-16 49 views
1

我使用Rob Connery的Subsonic ORM和Backbone.Js来构建javascript单页面演示应用程序。在服务端的一点还有就是把所有存在于数据源中的记录,像下面SubSonic ORM with backbone.js

[WebMethod] 
[ScriptMethod(UseHttpGet = true)] 
public TaskCollection GetAllTasks() 
{ 
    TaskCollection coll = new TaskCollection(); 
    coll.Load(); 
    return coll; 
} 

但目前看来,集合中的每个Task被污染与只需要对服务器性能的负荷合同侧。这是根据请求返回的JSON

[{ 
    "__type": "DAL.Task", 
    "Taskid": 1, 
    "Taskname": "welcome to india", 
    "Createdon": "\/Date(1334591056903)\/", 
    "Modifiedon": "\/Date(1334591056903)\/", 
    "ValidateWhenSaving": true, 
    "DirtyColumns": [], 
    "IsLoaded": true, 
    "IsNew": false, 
    "IsDirty": false, 
    "TableName": "task", 
    "ProviderName": null, 
    "NullExceptionMessage": "{0} requires a value", 
    "InvalidTypeExceptionMessage": "{0} is not a valid {1}", 
    "LengthExceptionMessage": "{0} exceeds the maximum length of {1}", 
    "Errors": [] 
}] 

我需要的全部是CreatedOn,ModifiedOn和TaskName,TaskId。我如何确保只有这些发送使用SubSonic ORM

+0

大多数奥姆斯称这是一个 “投影”,基本上做了一个请求返回列的子集的查询。你可以尝试谷歌搜索“亚音速投影”,前4个结果都是堆栈溢出的链接。 – 2012-04-17 11:15:11

+0

@MichaelMaddox不理解任何事情,无论我是哑巴还是没有时间去查看SubSonic的详细说明,其中的域名亚音速项目也已过期:( – Deeptechtons 2012-04-17 11:42:44

回答

1

这里有一对夫妇的想法...

使用视图模型来自动选择属性:

public class TaskView 
{ 
    public int TaskID { get; set; } 
    public string TaskDescription { get; set; } 
} 
... 
var results = new Select().From(Tables.Task).ExecuteTypedList<TaskView>(); 

使用匿名类型

var qry = new Select(new string[] { Task.Columns.TaskID, Task.Columns.TaskDescription }).From(Tables.Task); 
var resultList = new List<object>(); 
using (IDataReader rdr = qry.ExecuteReader()) 
{ 
    while (rdr.Read()) 
     resultList.Add(new 
     { 
      TaskID = rdr[0].ToString(), 
      TaskDescription = rdr[1].ToString(), 
     }); 
} 
+0

查看模型可能适合帐单(但仍然是工作过度我是抽象越来越多)匿名类型??我使用.net 2.0,所以我不使用善良C#3.0提供:( – Deeptechtons 2012-04-17 11:44:17

0

发送电线我不使用SubSonic,但我不得不承认这似乎是一个很好的例子,你可能想使用ViewModel,那就是,这是一个从您的模型专门为视图填充的模型。现在就把ViewModel绑定到Model中,和/或从视图模型中为许多ViewModel生成属性(因为生成ViewModels对于一堆模型肯定是单调乏味和容易出错的),好吧,我听说过几种通用解决方案。我实际上试图找到一个解决方案,我对自己感到满意;在此期间,我不得不手写它们直到找到更好的解决方案。我相信如果你想要强类型的ViewModels,你可以使用像AutoMapper这样的工具,尽管我从来没有用过它。我也看到了使用或从C#动态继承的解决方案,然后修改访问器(尽管我认为这可能稍微产生JSON的问题)。

我使用ViewModels的主要原因是我可以很容易地控制日期的格式。但是,通过使用不同的JSON序列化器可以做得更好。当然,使用ViewModels也可以让您灵活地根据需要更改您的数据层。但我不得不承认,这很乏味。我认为我的实现可以通过一些自动化处理得到更好的处理,但到目前为止我不知道如何处理。

我知道这只是一个部分的答案。我很好奇可能会出现其他答案。