0
は、ここに私のC#のコード一括挿入C#でtcpまたはストアドプロシージャを使用してdocumentdb
public static async Task<Database> GetDatabase(string databaseName)
{
if (client.CreateDatabaseQuery().Where(db => db.Id ==
databaseName).AsEnumerable().Any())
{
return client.CreateDatabaseQuery().Where(db => db.Id ==
databaseName).AsEnumerable().FirstOrDefault();
}
return await client.CreateDatabaseAsync(new Database
{
Id = databaseName
});
}
//check if collection already exists
public static async Task<DocumentCollection> GetCollection(Database database, string collName)
{
if (client.CreateDocumentCollectionQuery
(database.SelfLink).Where(coll => coll.Id ==
collName).ToArray().Any())
{
return client.CreateDocumentCollectionQuery(database.SelfLink).
Where(coll => coll.Id ==
collName).ToArray().FirstOrDefault();
}
return await client.CreateDocumentCollectionAsync(database.SelfLink, new DocumentCollection
{ Id = collName });
}
[Route("getHotelDetails")]
[HttpPost]
public HttpResponseMessage getHotelDetails(RootObj rootObj)
{
var result = "";
Database database = GetDatabase("sampledb").Result;
DocumentCollection collection = GetCollection(database, "samplecollection").Result;
string convertListToJson = JsonConvert.SerializeObject(rootObj);
try
{
var url = "http://www.example.com";
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
request.Method = "POST";
request.ContentType = "application/json; encoding='utf-8'";
request.Credentials = GetCredential();
request.PreAuthenticate = true;
using (var streamWriter = new StreamWriter(request.GetRequestStream()))
{
streamWriter.Write(convertListToJson);
streamWriter.Flush();
}
var httpResponse = (HttpWebResponse)request.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
result = streamReader.ReadToEnd();
}
}
catch (WebException ex)
{
// Log exception and throw as for GET example above
HttpResponseMessage resp = Request.CreateResponse(HttpStatusCode.ExpectationFailed, ex.Message.ToString());
return resp;
}
RootObject obj = JsonConvert.DeserializeObject<RootObject>(result);
HttpResponseMessage res = Request.CreateResponse(HttpStatusCode.OK, obj);
return res;
}
private CredentialCache GetCredential()
{
string url = @"http://www.example.com";
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;
CredentialCache credentialCache = new CredentialCache();
credentialCache.Add(new System.Uri(url), "Basic", new NetworkCredential("xxx", "yyy"));
return credentialCache;
}
とパラメータ私が説明されている必要rootObj
public class HotelCriteria
{
public string HotelCode { get; set; }
}
public class RoomRatePlans
{
public HotelCriteria HotelCriteria { get; set; }
}
public class RootObj
{
public string Version { get; set; }
public string EchoToken { get; set; }
public RoomRatePlans RoomRatePlans { get; set; }
}
最終結果のためのモデルクラスです。
{
"Version": "1.2",
"EchoToken": "879791878",
"RoomRatePlans": {
"HotelCriteria": {
"HotelCode": "101920"
}
}
}
:だから、最初は私はので、ここでホテルの詳細とそのインベントリを取得するには、外部APIを呼び出しています
はサンプル要求と応答は、私は外部のAPIにJSONとして
要求を呼び出した後取り戻すことです
そして、私は
{
"HotelCriteria": {
"HotelCode": "NONIDS",
"HotelName": "TestThe Zuri Whitefield Bengaluru"
},
"RoomTypes": {
"RoomTypeList": [
{
"InvTypeCode": "ZCR",
"Name": "Zuri Club Room",
"BaseOccupancy": 2,
"MaxOccupancy": 3,
"Quantity": 66,
"IsRoomActive": 1,
"RoomDescription": ""
},
{
"InvTypeCode": "ZRR",
"Name": "Zuri Room",
"BaseOccupancy": 2,
"MaxOccupancy": 3,
"Quantity": 90,
"IsRoomActive": 1,
"RoomDescription": ""
},
{
"InvTypeCode": "ZSR",
"Name": "Zuri Suite Room",
"BaseOccupancy": 2,
"MaxOccupancy": 3,
"Quantity": 4,
"IsRoomActive": 1,
"RoomDescription": ""
}
]
},
"RatePlans": {
"RatePlanList": [
{
"RatePlanCode": "B2C00001",
"RatePlanCategory": "B2C",
"RatePlanStatusType": 1,
"RatePlanName": "Channel Rates",
"Description": "Channel Rates",
"InvTypeCode": "ZCR",
"MealPlanCode": "CP",
"MealPlanDesc": "Continental Plan",
"Start": "2016-06-27",
"End": "2017-03-31",
"CurrencyCode": "INR"
},
{
"RatePlanCode": "B2C00001",
"RatePlanCategory": "B2C",
"RatePlanStatusType": 1,
"RatePlanName": "Channel Rates",
"Description": "Channel Rates",
"InvTypeCode": "ZRR",
"MealPlanCode": "CP",
"MealPlanDesc": "Continental Plan",
"Start": "2016-06-27",
"End": "2017-03-31",
"CurrencyCode": "INR"
},
{
"RatePlanCode": "B2C00001",
"RatePlanCategory": "B2C",
"RatePlanStatusType": 1,
"RatePlanName": "Channel Rates",
"Description": "Channel Rates",
"InvTypeCode": "ZSR",
"MealPlanCode": "CP",
"MealPlanDesc": "Continental Plan",
"Start": "2016-06-27",
"End": "2017-03-31",
"CurrencyCode": "INR"
}
]
},
"Inclusions": {
"InclusionList": [
{
"MealPlanCode": "CP",
"MealPlanDesc": "Continental Plan"
}
]
}
}
バック私は戻って
取得応答のモデルクラスを取得することに応答 public class HotelCriteria
{
public string HotelCode { get; set; }
public string HotelName { get; set; }
}
public class RoomTypeList
{
public string InvTypeCode { get; set; }
public string Name { get; set; }
public int BaseOccupancy { get; set; }
public int MaxOccupancy { get; set; }
public int Quantity { get; set; }
public int IsRoomActive { get; set; }
public string RoomDescription { get; set; }
}
public class RoomTypes
{
public List<RoomTypeList> RoomTypeList { get; set; }
}
public class RatePlanList
{
public string RatePlanCode { get; set; }
public string RatePlanCategory { get; set; }
public int RatePlanStatusType { get; set; }
public string RatePlanName { get; set; }
public string Description { get; set; }
public string InvTypeCode { get; set; }
public string MealPlanCode { get; set; }
public string MealPlanDesc { get; set; }
public string Start { get; set; }
public string End { get; set; }
public string CurrencyCode { get; set; }
}
public class RatePlans
{
public List<RatePlanList> RatePlanList { get; set; }
}
public class InclusionList
{
public string MealPlanCode { get; set; }
public string MealPlanDesc { get; set; }
}
public class Inclusions
{
public List<InclusionList> InclusionList { get; set; }
}
public class RootObject
{
public HotelCriteria HotelCriteria { get; set; }
public RoomTypes RoomTypes { get; set; }
public RatePlans RatePlans { get; set; }
public Inclusions Inclusions { get; set; }
}
私は残りのAPIをそれぞれのホテルと在庫の詳細を取得するために私は1500ホテルのリストを持っています。順番に、私は個々のドキュメントとしてdocumentdbに保存される各回答を合計したい私はあなたのforeachを使用し、createdocumentasyncメソッドを使用すると適切な選択になるか、リスト内のすべての1500文書の詳細を持つ一括レコードを挿入することができます。あなたの提案や助けを必要とする!
ありがとうございます!
forループを使用してリストに追加し、一括挿入しますか? BTWこれはado.netではありません。私は、C#Web API 2でazure documentdbを使用しています。 – Melvin
はい、まさに!私はweb api 2を使用していませんが、asmxのみですが、従来のado.netはmvc/web apiでも使用できますが、使用するのが快適なところからとどまります。同じ論理/アプローチ –