2016-06-23 2 views
2

Я пытаюсь написать запрос в .net для orient db, и я не уверен, поддерживает ли API UPSERT, как в документации.Как написать запрос «UPSERT» для Orientdb в .net, C#?

+0

Это выглядит как API поддерживает UPSERT. вам нужен пример? http://orientdb.com/docs/2.2/SQL-Update.html – Venky

+0

'orientdb> UPDATE Client SET id = 23 UPSERT WHERE id = 23' Обновляет запись, если она существует. В противном случае вставляет запись. – Venky

+0

Да, вена, пример будет замечательным! благодаря! –

ответ

2

Я могу дать вам пример UPDATE/UPSERT с C#. В следующем коде создается новая база данных и относительные классы TestDatabaseName (Users) и ее свойства (userID). В противном случае, если база данных уже существует, она выполняет команду UPDATE/UPSERT.

C# Код:

using System; 
using Orient.Client; 

namespace Stack37995408 

{ 

    static class Stack37995408 

    { 

     private static string _hostname = "127.0.0.1"; 
     private static int _port = 2424; 
     private static string _rootUserName = "root"; 
     private static string _rootUserPassword = "root"; 

     private static OServer _server; 

     private static string _DBname = "TestDatabaseName"; 
     private static string _username = "root"; 
     private static string _password = "root"; 
     private static string _aliasDB = "myTestDatabaseAlias"; 

     static void Main(string[] args) 

     { 

      _server = new OServer(_hostname, _port, _rootUserName, _rootUserPassword); 

      if (!_server.DatabaseExist(_DBname, OStorageType.PLocal)) 

      { 

       _server.CreateDatabase(_DBname, ODatabaseType.Graph, OStorageType.PLocal); 

       Console.WriteLine("Database " + _DBname + " created"); 

       //Connect to the DB 

       OClient.CreateDatabasePool(
        _hostname, 
        _port, 
        _DBname, 
        ODatabaseType.Graph, 
        _username, 
        _password, 
        10, 
        _aliasDB 
       ); 

       Console.WriteLine("Connected to the DB " + _DBname); 

       using (ODatabase database = new ODatabase(_aliasDB)) 

       { 

        //Classes and properties creation 

        database 
         .Create 
         .Class("Users") 
         .Extends<OVertex>() 
         .Run(); 

        database 
         .Create 
         .Property("userID", OType.Integer) 
         .Class("users") 
         .Run(); 

        //Populate the DB 

        OVertex vertexUser = new OVertex(); 
        vertexUser.OClassName = "Users"; 
        vertexUser 
         .SetField("userID", 1); 

        OVertex createVertexUser = database 
         .Create.Vertex(vertexUser) 
         .Run(); 

        Console.WriteLine("Created vertex " + createVertexUser.OClassName + " with @rid " + createVertexUser.ORID + " and userID " + createVertexUser.GetField<int>("userID")); 

       } 

      } 

      else 

      { 

       //Connection 

       OClient.CreateDatabasePool(
        _hostname, 
        _port, 
        _DBname, 
        ODatabaseType.Graph, 
        _username, 
        _password, 
        10, 
        _aliasDB 
       ); 

       Console.WriteLine("Connected to the DB " + _DBname); 

       using (ODatabase database = new ODatabase(_aliasDB)) 

       { 

        database 
         .Update() 
         .Class("Users") 
         .Set("userID", 2) 
         .Upsert() 
         .Where("userID") 
         .Equals(2) 
         .Run(); 

        Console.WriteLine("Operation executed"); 

       } 

      } 

     } 

    } 

} 

Первое исполнение (DB, классы, свойства и создание первой вершиной):

Выход:

Started Thread 4320 
Database TestDatabaseName created 
Started Thread 7184 
Connected to the DB TestDatabaseName 
Created vertex Users with @rid #11:0 and userID 1 
Started Thread 4368 

Студия Выход :

enter image description here

Второе исполнение (я стараюсь обновлять вершину с userID = 2, но команда UPSERT создает его, потому что он не существует):

Раздел:

database 
    .Update() 
    .Class("Users") 
    .Set("userID", 2) 
    .Upsert() 
    .Where("userID") 
    .Equals(2) 
    .Run(); 

Выход:

Started Thread 6172 
Started Thread 7244 
Connected to the DB TestDatabaseName 
Operation executed 
Started Thread 5860 

Студия Выход:

enter image description here

Надеется, что это помогает

+0

Большое спасибо! это помогает. Так что, если я хочу добавить больше параметров в пункт «где»? Могу ли я это сделать? –

+0

Привет @Howard Roark, да, это простой пример, но если вы хотите, вы можете добавить больше параметров (более '.Set()' для установки нескольких полей '.And()' после '.Where()' для проверки нескольких условий, ecc ...). Надеюсь, что это было полезно. – LucaS

+0

Абсолютно очень полезно! Спасибо большое! –

Смежные вопросы