を取得する私は、このデータを持っている:ユーザー不適切なJSONデータカルコゲノフルバレン骨格
UserId Name
42 Abc
43 Pqr
44 lmn
45 xyz
マッピング:
MappingId User1 User2
1 42 43
2 42 44
3 43 44
今、私は、ユーザーとユーザーを取得するために、すべての秒を発射する1つのWebサービスを持っていますjsonデータを次の形式で接続して返します。
var data =
[{
"UserId": 42,
"Name": "Abc",
"Connections": [43,44]
}, {
"UserId": 43,
"Name": "Pqr",
"Connections": [44]
}, {
"UserId": 44,
"Name": "Lmn",
"Connections": []
}, {
"UserId": 45,
"Name": "xyz",
"Connections": []
}];
基本的に、このWebサービスの目的は、常に新しいユーザーと既存のユーザーの新しい接続を取得することです。そのため、私は毎秒この Webサービスを起動しています。
私の条件はこれです(既存のユーザーをフェッチして既存のユーザーをフェッチするか、既存のユーザーの接続をフェッチして新しい をフェッチします)。ただし、jsonのデータ構造は同じにする必要があります。
各Webサービスコールで新しいユーザーがすべて取得されるか、新しいユーザーが存在しない場合は、新しい接続が確立された既存のユーザーをフェッチします。
ユースケース1:
UserId Name
42 Abc
43 Pqr
出力JSON:
var data =
[{
"UserId": 42,
"Name": "Abc",
"Connections":[]
},
{
"UserId": 43,
"Name": "xyz",
"Connections":[]
}];
ユースケース2: 接続は、ユーザ42とユーザ43との間に形成されている場合: 出力json:
var data =
[{
"UserId": 42,
"Name": "Abc",
"Connections":[43]
}];
ユースケース3:新しいユーザーが入力:
UserId Name
42 Abc
43 Pqr
44 lmn
出力JSON:
var data =
[{
"UserId": 44,
"Name": "Almn",
"Connections":[]
}];
ユースケース4:ユーザー42と44との間に作られた接続:
をvar data =
[{
"UserId": 42,
"Name": "Abc",
"Connections":[42,44]
}];
これは私のコードです:
public HttpResponseMessage GetUsers([FromUri]Int32 skip = 0)
{
var userBll = new UserBLL();
var result = context.Users.ToList();
var lists = new List<string>();
var connectionsData = context.Mappings.ToList().OrderBy(t => t.CreatedDate.Value.Date).ThenBy(t => t.CreatedDate.Value.TimeOfDay).Skip(skip).Take(1);
lists.Add(connectionsData.FirstOrDefault().User1 + "," + connectionsData.FirstOrDefault().User2);
var response = Request.CreateResponse(HttpStatusCode.OK, result.Select(r => new
{
UserId=r.UserId,
Name = r.FirstName + " " + r.LastName,
Connections = lists
}));
return response;
}
しかし、入力データの下での出力の下に取得:
UserId Name
42 Abc
43 Pqr
44 lmn
45 xyz
MappingId User1 User2
1 42 43
var data =
[{
"UserId": 42,
"Name": "Abc",
"Connections": [42,43]
}, {
"UserId": 43,
"Name": "Pqr",
"Connections": [42,43]
}, {
"UserId": 44,
"Name": "Lmn",
"Connections": [42,43]
}, {
"UserId": 45,
"Name": "xyz",
"Connections": [42,43]
}];
Javascriptのコード:
var userList = [];
function GetData() {
$.getJSON('Url', {skip:userList.length} ,function (response) {
updateUserList(response);
});
}
function updateUserList(data) {
if (JSON.stringify(userList).toString() != JSON.stringify(data).toString()) { //if old data is not same as new data
userList = data;
}
else
{
setTimeout(GetData, 1000); //fire request every 1 seconds
}
}
は誰がこれで私を助けることはできますか?
注::私は外来キーの関係は持っていません。
あなたは 'ucontext'と' context'を持っています - テーブルは別々のデータベースか二つの異なるコンテキストに保持されていますか?また、 'connections'プロパティを設定する前に' connections'を宣言していません。しかし、あなたの問題の要点は 'User'から' Mappings'に参加していないので、 'User'はすべて' Mappings'の同じ最初のレコードを表示しているということです。 – strickt01
@ strickt01:ご迷惑をおかけしましたが、ご指摘いただきありがとうございます。質問が更新されました。 –
を確認してください。これはトピックではありませんが、javascriptクライアントにリアルタイムデータブロードキャストが必要な場合はSignalRを調べることをおすすめします。 APIを1秒ごとにpingすることは、今後問題になります。 –