1

私は、Backbone.Js で Rob Connery による Subsonic ORM を使用して、javascript の単一ページのデモ アプリケーションを構築しています。サービスエンドポイントの1つに、以下のようにデータソースに存在するすべてのレコードを送信するコントラクトがあります

[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 を使用してこれらのみが送信されるようにするにはどうすればよいですか

4

2 に答える 2

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(),
        });
}
于 2012-04-17T01:01:03.827 に答える
0

私はSubSonicを使用していませんが、これはViewModel、つまりモデルからビュー専用に入力されたモデルを使用する良い例のように思われることを認めなければなりません。これで、ViewModelをモデルにバインドしたり、ビューのモデルから多くのViewModelのプロパティを生成したりする限り(ViewModelの生成は間違いなく面倒で、多数のモデルでエラーが発生しやすいため)、よく聞いています。いくつかの一般的な解決策の。私は実際に自分自身に満足している解決策を見つけようとしています。その間、私はより良い解決策を見つけるまでそれらを手書きすることを余儀なくされました。強く型付けされたViewModelが必要な場合は、AutoMapperのようなツールを使用できますが、私自身は使用したことがありません。私'

ViewModelsを使用した主な理由は、日付の形式を簡単に制御できることです。ただし、別のJSONシリアライザーを使用することでより適切に実行できる可能性があります。もちろん、ViewModelsを使用すると、必要に応じてデータレイヤーを柔軟に変更することもできます。しかし、私は認めなければなりません、それは退屈です。私の実装は少し自動化することでよりうまく処理できると思いますが、今のところそれを処理する方法がわかりません。

これは部分的な答えに過ぎないと思います。他にどんな答えが出てくるのか気になります。

于 2012-04-16T16:52:58.253 に答える