Hızlı Başlangıç: .NET SDK Tablo API'si Azure Cosmos DB ile Cosmos oluşturma

Uygulama hedefı: tablo API'si

Bu hızlı başlangıçta, bir .NET uygulamasından Azure Cosmos DB Tablo API'si nasıl erişin? Cosmos DB Tablo API'si, uygulamaların yapılandırılmış NoSQL verilerini bulutta depolamasına olanak sağlayan şemasız bir veri deposudur. Veriler şemasız bir tasarımda depolandığı için tabloya yeni öznitelik içeren bir nesne ekleniyorsa yeni özellikler (sütunlar) otomatik olarak tabloya eklenir.

.NET uygulamaları Azure.Data.Tables Cosmos Tablo API'si kullanarak NuGet erişebilirsiniz. Azure.Data.Tables paketi, hem .NET Framework (4.7.2 ve sonrası) hem de .NET Core (2.0 ve sonrası) uygulamalarıyla çalışan bir .NET Standard 2.0 kitaplığıdır.

Önkoşullar

İlkeler hem hem de .NET Core uygulamaları için geçerli olsa da örnek uygulama .NET Core 3.1.NET Framework yazılır. IDE olarak Visual Studio, Mac için Visual Studioveya Visual Studio Code kullanabilirsiniz.

Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.

Örnek uygulama

Bu öğreticinin örnek uygulaması depodan kopyalanmış veya indirilmiş https://github.com/Azure-Samples/msdocs-azure-data-tables-sdk-dotnet olabilir. Hem başlangıç hem de tamamlanmış uygulama örnek depoya dahil edilir.

git clone https://github.com/Azure-Samples/msdocs-azure-data-tables-sdk-dotnet

Örnek uygulama, uygulamanın özelliklerini göstermek için örnek olarak hava durumu verilerini Tablo API'si. Hava durumu gözlemlerini temsil eden nesneler Tablo API'si kullanılarak depolanır ve alınır. Bunlar arasında, Tablo API'si'nin şemasız özelliklerini göstermek için ek özelliklere sahip nesneler Tablo API'si.

Cosmos DB tablosunda depolanmış verileri gösteren, Tablo API'si.

1 - Azure Cosmos DB hesabı oluşturma

İlk olarak uygulamanıza Cosmos tabloları içeren bir Veritabanı Tabloları API'si hesabı oluşturmanız gerekir. Bu işlem Azure portal, Azure CLI veya Azure PowerShell.

Azure portal veritabanı hesabı oluşturmak için Cosmos izleyin.

Yönergeler Ekran görüntüsü
Azure portalında:
  1. Azure portal en üstündeki arama çubuğunda "Cosmos DB" yazın.
  2. arama çubuğunun altında görüntülenen menüde, hizmetler altında, Azure Cosmos DB etiketli öğeyi seçin.
Azure'da veritabanı hesaplarını bulmak için üst araç çubuğundaki arama kutusunun Cosmos gösteren ekran görüntüsü.
Azure veritabanı Cosmos +Oluştur'a tıklayın. Azure'da veritabanı hesapları sayfasındaki Cosmos düğmesinin konumunu gösteren ekran görüntüsü.
API seç seçeneği sayfasında Azure Tablosu seçeneğini belirleyin. Doğru seçenek olarak Azure Tablosu seçeneğini gösteren ekran görüntüsü.
Azure Cosmos DB hesabı oluştur-Azure tablosu sayfasında, aşağıdaki gibi formu doldurun.
  1. rg-msdocs-tables-sdk-demo Kaynak grubu altında Yeni oluştur bağlantısını seçerek adlı depolama hesabı için yeni bir kaynak grubu oluşturun.
  2. cosmos-msdocs-tables-sdk-demo-XYZBenzersiz bir hesap adı oluşturmak için depolama HESABıNıZA xyz 'nin üç rastgele karakterden oluşan bir ad verin. Azure Cosmos DB hesap adları 3 ila 44 karakter uzunluğunda olmalı ve yalnızca küçük harf, sayı veya kısa çizgi (-) karakterini içerebilir.
  3. Depolama hesabınız için bölge seçin.
  4. Standart performans ' ı seçin.
  5. Kapasite modu altında Bu örnek için sağlanan aktarım hızını seçin.
  6. Bu örnek için ücretsiz katman Indirimi Uygula altında Uygula ' yı seçin.
  7. ekranın alt kısmındaki gözden geçir + oluştur düğmesini seçin ve ardından Azure Cosmos DB hesabınızı oluşturmak için özet ekranında "oluştur" u seçin. Bu işlem birkaç dakika sürebilir.
Veritabanı Hesabı oluşturma sayfasındaki alanların nasıl doldurul Cosmos ekran görüntüsü.

2 - Tablo oluşturma

Ardından, Cosmos DB hesabınız içinde, Cosmos için bir tablo oluşturmanız gerekir. Geleneksel veritabanından farklı olarak tablodaki özellikleri (sütunları) değil yalnızca tablonun adını belirtmeniz gerekir. Veriler tablonıza yüklendiğinde özellikler (sütunlar) gerektiğinde otomatik olarak oluşturulur.

aşağıdaki Azure portalveritabanı hesabınız içinde bir tablo oluşturmak için Cosmos tamamlayın.

Yönergeler Ekran görüntüsü
Azure Azure portal veritabanı hesabının genel bakış sayfasına Cosmos gidin. Cosmos DB hesabınıza ilişkin adı (cosmos-msdocs-tables-sdk-demo-XYZ) yazarak ve kaynakların başlığına bakarak Cosmos DB hesabınıza ilişkin genel bakış sayfasına gidin.Genel bakış sayfasına gitmek için Azure Cosmos DB hesabı adını seçin. Üst araç çubuğundaki arama kutusunu kullanarak veritabanı veritabanı hesabınızla nasıl Cosmos ekran görüntüsü.
Genel Bakış sayfasında + Tablo Ekle' yi seçin. Yeni Tablo iletişim kutusu sayfanın sağ tarafında gösterilir. Tablo Ekle düğmesinin konumunu gösteren ekran görüntüsü.
Yeni tablo iletişim kutusunda, aşağıdaki gibi formu doldurun.
  1. Tablo KIMLIĞI için hava verileri adını girin. Bu, tablonun adıdır.
  2. Bu örnek için tablo üretimi (otomatik ölçeklendirme) altında el ile ' yi seçin.
  3. Tahmini RU/s 'niz altında 400 varsayılan değerini kullanın.
  4. Tabloyu oluşturmak için Tamam düğmesini seçin.
Veritabanı tablosu için Yeni Tablo iletişim kutusunu gösteren Cosmos görüntüsü.

3 - Veritabanı Cosmos dizesini alma

Cosmos DB'de tablolarınızı erişmek için uygulamanıza CosmosDB veritabanı hesabı için tablo bağlantı dizesi Depolama gerekir. Bağlantı dizesi Azure portal, Azure CLI veya Azure PowerShell.

Yönergeler Ekran görüntüsü
Azure Cosmos DB hesabı sayfasının sol tarafında, Ayarlar üst bilgisi altında bağlantı dizesi adlı menü öğesini bulun ve seçin. Depolama hesabı için bağlantı dizesini alabileceğiniz bir sayfaya yönlendirilirsiniz. Veritabanı sayfasında bağlantı dizeleri bağlantısının konumunu gösteren Cosmos görüntüsü.
Uygulamanızda kullanmak üzere BIRINCIL bağlantı dizesi değerini kopyalayın. Uygulamanıza hangi bağlantı dizesinin seç ve hangisinde kullanı gösteren ekran görüntüsü.

Cosmos DB hesabınız için bağlantı dizesi bir uygulama gizli dizisi olarak kabul edilir ve diğer uygulama gizli dizileri veya parolalar gibi korunmalıdır. Bu örnek, geliştirme sırasında bağlantı dizesini depolamak ve uygulamanın kullanımına hazır hale etmek için Gizli Dizi Yöneticisi aracını kullanır. Gizli Bilgi Yöneticisi aracına Visual Studio .NET CLI'dan erişilebilir.

Gizli Dizi Yöneticisi aracını Visual Studio için projeye sağ tıklayın ve bağlam menüsünden Kullanıcı Gizli Dizilerini Yönet'i seçin. Bu, projenin secrets.json dosyasını açar. Dosyanın içeriğini aşağıdaki JSON ile değiştirin ve yerine Cosmos DB tablo bağlantı dizenizi girin.

{
  "ConnectionStrings": {
    "CosmosTableApi": "<cosmos db table connection string>"
  }  
}

4 - Azure.Data.Tables NuGet yükleme

.NET uygulamasından Cosmos DB Tablo API'si erişmek için Azure.Data.Tables NuGet yükleyin.

Install-Package Azure.Data.Tables

5 - Startup.cs'de Tablo istemcisini yapılandırma

Azure SDK, Azure'da farklı işlemler yürütmek için istemci nesnelerini kullanarak Azure ile iletişim kurar. TableClient nesnesi, Cosmos DB veritabanı sunucusuyla iletişim Tablo API'si.

Bir uygulama genellikle uygulama genelinde kullanılacak tablo başına tek bir TableClient nesnesi oluşturur. Bunu gerçekleştirmek için bağımlılık ekleme (DI) kullanılması ve TableClient nesnesini tekli olarak kaydetmeniz önerilir. Azure SDK ile DI kullanma hakkında daha fazla bilgi için bkz. .NET için Azure SDK ile bağımlılık ekleme.

Uygulamanın Startup.cs dosyasında ConfigureServices() yöntemini aşağıdaki kod parçacığıyla eş olacak şekilde düzenleyin:

public void ConfigureServices(IServiceCollection services)
{
    services.AddRazorPages()
        .AddMvcOptions(options =>
        {
            options.Filters.Add(new ValidationFilter());
        });
    
    var connectionString = Configuration.GetConnectionString("CosmosTableApi");
    services.AddSingleton<TableClient>(new TableClient(connectionString, "WeatherData"));
    
    services.AddSingleton<TablesService>();
}

Startup.cs dosyasının en üstüne aşağıdaki using deyimini de eklemeniz gerekir.

using Azure.Data.Tables;

6 - Veritabanı Cosmos işlemlerini uygulama

Örnek Cosmos veritabanı tablo işlemlerinin hepsi Hizmetler TableService dizininde bulunan sınıfında uygulanır. SDK paketinde Azure nesnelerle çalışmak için bu dosyanın üst kısmında ve ad alanlarını Azure.Data.Tables içeri Azure.Data.Tables aktarmanız gerekir.

using Azure;
using Azure.Data.Tables;

Sınıfının başında, TableClient nesnesi için bir üye değişkeni ve TableService TableClient nesnesinin sınıfa eklensin izin vermek için bir oluşturucu ekleyin.

private TableClient _tableClient;

public TablesService(TableClient tableClient)
{
    _tableClient = tableClient;
}

Tablodan satırlar alır

TableClient sınıfı, tablodaki satırları seçmenize olanak sağlayan Query adlı bir yöntem içerir. Bu örnekte, yöntemine parametre geçirilene kadar tablodan tüm satırlar seçilir.

yöntemi ayrıca, model sınıfı verilerini belirten ITableEntity türünde genel bir parametre olarak döndürülür. Bu durumda, TableEntity yerleşik sınıfı kullanılır; başka bir anlama Query gelir, yöntemin sonuçları olarak Pageable<TableEntity> bir koleksiyon geri döneceği anlamına gelir.

public IEnumerable<WeatherDataModel> GetAllRows()
{
    Pageable<TableEntity> entities = _tableClient.Query<TableEntity>();

    return entities.Select(e => MapTableEntityToWeatherDataModel(e));
}

Pakette tanımlanan TableEntity Azure.Data.Tables sınıfı, tablodaki bölüm anahtarı ve satır anahtarı değerleri için özelliklere sahiptir. Birlikte, tablodaki satır için benzersiz bir anahtar için bu iki değer. Bu örnek uygulamada, hava durumu istasyonunun (şehir) adı bölüm anahtarında, gözlemin tarihi/saati ise satır anahtarında depolanır. Diğer tüm özellikler (sıcaklık, nem, rüzgar hızı) nesnesinde bir sözlükte TableEntity depolanır.

TableEntity nesnesini kendi tanımınıza ait bir nesneyle eşlemek yaygın bir uygulamadır. Örnek uygulama bu amaç için WeatherDataModel Models dizininde bir sınıf tanımlar. Bu sınıf, bölüm anahtarının ve satır anahtarının eşleyecek istasyon adı ve gözlem tarihi özelliklerine sahiptir ve bu değerler için daha anlamlı özellik adları sağlar. Ardından nesnede diğer tüm özellikleri depolamak için bir sözlük kullanır. Bir satırda herhangi bir sayıda rastgele özellik olması ve model nesnelerimizin bunların hepsini yakalaması mümkün olduğu için Tablo depolama ile çalışırken bu yaygın bir desendir. Bu sınıf ayrıca sınıfındaki özellikleri listeleye yöntemler içerir.

public class WeatherDataModel 
{
    // Captures all of the weather data properties -- temp, humidity, wind speed, etc
    private Dictionary<string, object> _properties = new Dictionary<string, object>();

    public string StationName { get; set; }

    public string ObservationDate { get; set; }

    public DateTimeOffset? Timestamp { get; set; }

    public string Etag { get; set; }

    public object this[string name] 
    { 
        get => ( ContainsProperty(name)) ? _properties[name] : null; 
        set => _properties[name] = value; 
    }
    
    public ICollection<string> PropertyNames => _properties.Keys;

    public int PropertyCount => _properties.Count;

    public bool ContainsProperty(string name) => _properties.ContainsKey(name);       
}

yöntemi MapTableEntityToWeatherDataModel bir TableEntity nesnesini bir nesnesiyle eşlemek için WeatherDataModel kullanılır. TableEntity nesnesi, nesnenin tablosunda yer alan tüm özellik adlarını (aslında tablodaki bu satırın sütun adlarını) almak için bir Keys özelliği içerir. yöntemi, , , ve özelliklerini doğrudan eşler ve ardından nesnesinde diğer özellikler üzerinde yinelenen özelliğini kullanır ve doğrudan eşlenmiş olan özelliklerden eksi olarak bu özellikleri nesnesiyle MapTableEntityToWeatherDataModel PartitionKey RowKey Timestamp Etag Keys TableEntity WeatherDataModel eşler.

yönteminde kodu aşağıdaki MapTableEntityToWeatherDataModel kod bloğuyla eş olacak şekilde düzenleyin.

public WeatherDataModel MapTableEntityToWeatherDataModel(TableEntity entity)
{
    WeatherDataModel observation = new WeatherDataModel();
    observation.StationName = entity.PartitionKey;
    observation.ObservationDate = entity.RowKey;
    observation.Timestamp = entity.Timestamp;
    observation.Etag = entity.ETag.ToString();

    var measurements = entity.Keys.Where(key => !EXCLUDE_TABLE_ENTITY_KEYS.Contains(key));
    foreach (var key in measurements)
    {
        observation[key] = entity[key];
    }
    return observation;            
}

Tablodan döndürülen satırları filtreleme

Bir tablodan döndürülen satırları filtrelemek için Query yöntemine bir OData stili filtre dizesi geçebilirsiniz. Örneğin 1 Temmuz 2021 gece yarısı ile 2 Temmuz 2021 gece yarısı (dahil) arasında Chicago için tüm hava durumu okumalarını almak için aşağıdaki filtre dizesini geçersiniz.

PartitionKey eq 'Chicago' and RowKey ge '2021-07-01 12:00 AM' and RowKey le '2021-07-02 12:00 AM'

Sistem Sorgu seçeneğini filtrele bölümünde OData web sitesinde tüm OData filtre işleçlerini görüntüebilirsiniz.

Örnek uygulamada nesnesi, FilterResultsInputModel kullanıcı tarafından sağlanan tüm filtre ölçütlerini yakalamak için tasarlanmıştır.

public class FilterResultsInputModel : IValidatableObject
{
    public string PartitionKey { get; set; }
    public string RowKeyDateStart { get; set; }
    public string RowKeyTimeStart { get; set; }
    public string RowKeyDateEnd { get; set; }
    public string RowKeyTimeEnd { get; set; }
    [Range(-100, +200)]
    public double? MinTemperature { get; set; }
    [Range(-100,200)]
    public double? MaxTemperature { get; set; }
    [Range(0, 300)]
    public double? MinPrecipitation { get; set; }
    [Range(0,300)]
    public double? MaxPrecipitation { get; set; }
}

Bu nesne sınıfındaki yöntemine geçir olduğunda, her null olmayan özellik GetFilteredRows değeri için bir filtre dizesi TableService oluşturur. Ardından tüm değerleri bir "and" yan tümcesi ile birleştirerek birleştirilmiş bir filtre dizesi oluşturur. Bu birleşik filtre dizesi TableClient nesnesinde Query yöntemine geçir edilir ve yalnızca filtre dizesiyle eşleşen satırlar döndürülür. Uygulamanıza gereken uygun filtre dizelerini oluşturmak için kodunda benzer bir yöntem kullanabilirsiniz.

public IEnumerable<WeatherDataModel> GetFilteredRows(FilterResultsInputModel inputModel)
{
    List<string> filters = new List<string>();

    if (!String.IsNullOrEmpty(inputModel.PartitionKey))
        filters.Add($"PartitionKey eq '{inputModel.PartitionKey}'");
    if (!String.IsNullOrEmpty(inputModel.RowKeyDateStart) && !String.IsNullOrEmpty(inputModel.RowKeyTimeStart))
        filters.Add($"RowKey ge '{inputModel.RowKeyDateStart} {inputModel.RowKeyTimeStart}'");
    if (!String.IsNullOrEmpty(inputModel.RowKeyDateEnd) && !String.IsNullOrEmpty(inputModel.RowKeyTimeEnd))
        filters.Add($"RowKey le '{inputModel.RowKeyDateEnd} {inputModel.RowKeyTimeEnd}'");
    if (inputModel.MinTemperature.HasValue)
        filters.Add($"Temperature ge {inputModel.MinTemperature.Value}");
    if (inputModel.MaxTemperature.HasValue)
        filters.Add($"Temperature le {inputModel.MaxTemperature.Value}");
    if (inputModel.MinPrecipitation.HasValue)
        filters.Add($"Precipitation ge {inputModel.MinTemperature.Value}");
    if (inputModel.MaxPrecipitation.HasValue)
        filters.Add($"Precipitation le {inputModel.MaxTemperature.Value}");

    string filter = String.Join(" and ", filters);
    Pageable<TableEntity> entities = _tableClient.Query<TableEntity>(filter);

    return entities.Select(e => MapTableEntityToWeatherDataModel(e));
}

TableEntity nesnesi kullanarak veri ekleme

Tabloya veri eklemenin en basit yolu TableEntity nesnesi kullanmaktır. Bu örnekte, veriler bir giriş modeli nesnesinden TableEntity nesnesine eşlenmiş. Hava durumu istasyonu adını ve gözlem tarihini/saati temsil eden giriş nesnesi özellikleri sırasıyla PartitionKey ve RowKey özelliklerine eşlenmiş ve bu özellikler tablodaki satır için benzersiz bir anahtar oluşturur. Ardından, giriş modeli nesnesine ek özellikler TableEntity nesnede sözlük özellikleriyle eşlenmiş olur. Son olarak TableClient nesne üzerinde AddEntity yöntemi tabloya veri eklemek için kullanılır.

Örnek InsertTableEntity uygulamanın sınıfını aşağıdaki kodu içermesi için değiştirme.

public void InsertTableEntity(WeatherInputModel model)
{
    TableEntity entity = new TableEntity();
    entity.PartitionKey = model.StationName;
    entity.RowKey = $"{model.ObservationDate} {model.ObservationTime}";

    // The other values are added like a items to a dictionary
    entity["Temperature"] = model.Temperature;
    entity["Humidity"] = model.Humidity;
    entity["Barometer"] = model.Barometer;
    entity["WindDirection"] = model.WindDirection;
    entity["WindSpeed"] = model.WindSpeed;
    entity["Precipitation"] = model.Precipitation;

    _tableClient.AddEntity(entity);
}

TableEntity nesnesi kullanarak verileri upsert

Bu tabloda zaten mevcut olan bölüm anahtarı/satır anahtarı bileşimine sahip bir tabloya satır eklemeye çalışsanız bir hata alırsınız. Bu nedenle, tabloya satır eklerken Genellikle AddEntity yöntemi yerine UpsertEntity kullanmak tercih edilir. Verilen bölüm anahtarı/satır anahtarı bileşimi tabloda zaten varsa, UpsertEntity yöntemi mevcut satırı güncelleştirir. Aksi takdirde satır tabloya eklenir.

public void UpsertTableEntity(WeatherInputModel model)
{
    TableEntity entity = new TableEntity();
    entity.PartitionKey = model.StationName;
    entity.RowKey = $"{model.ObservationDate} {model.ObservationTime}";

    // The other values are added like a items to a dictionary
    entity["Temperature"] = model.Temperature;
    entity["Humidity"] = model.Humidity;
    entity["Barometer"] = model.Barometer;
    entity["WindDirection"] = model.WindDirection;
    entity["WindSpeed"] = model.WindSpeed;
    entity["Precipitation"] = model.Precipitation;

    _tableClient.UpsertEntity(entity);
}

Değişken özellikleriyle veri ekleme veya upsert

Cosmos DB Tablo API'si kullanmanın avantajlarından biri, bir tabloya yüklenen bir nesnenin yeni özellikler içerdiğinde bu özelliklerin tabloya otomatik olarak ekleniyor olması ve Cosmos DB'de depolanan değerlerin olmasıdır. Geleneksel veritabanında olduğu gibi sütunlar eklemek için ALTER TABLE gibi DDL deyimleri çalıştırmanıza gerek yoktur.

Bu model, zaman içinde hangi verilerin yakalanması gerektiğini ek olarak değiştirerek veri kaynaklarıyla ilgilenmek veya farklı girişler uygulamanıza farklı veriler sağlamaktayken uygulamanıza esneklik sağlar. Örnek uygulamada yalnızca temel hava durumu verilerini değil bazı ek değerleri de gönderen bir hava durumu istasyonunun benzetimini de tamamlarız. Bu yeni özelliklere sahip bir nesne tabloda ilk kez depolandığı zaman, karşılık gelen özellikler (sütunlar) tabloya otomatik olarak eklenir.

Örnek uygulamada sınıfı, ExpandableWeatherObject nesnesinde herhangi bir özellik kümesi desteklemek için bir iç sözlük etrafında yerleşiktir. Bu sınıf, bir nesnenin rastgele bir özellik kümesi içermesi gereken tipik bir deseni temsil eder.

public class ExpandableWeatherObject
{
    public Dictionary<string, object> _properties = new Dictionary<string, object>();

    public string StationName { get; set; }

    public string ObservationDate { get; set; }

    public object this[string name]
    {
        get => (ContainsProperty(name)) ? _properties[name] : null;
        set => _properties[name] = value;
    }

    public ICollection<string> PropertyNames => _properties.Keys;

    public int PropertyCount => _properties.Count;

    public bool ContainsProperty(string name) => _properties.ContainsKey(name);
}

Tablo API'si kullanarak böyle bir nesne eklemek veya upsert etmek için, genişletilebilir nesnenin özelliklerini bir TableEntity nesnesine eşler ve TableClient nesnesinde AddEntity veya UpsertEntity yöntemlerini uygun şekilde kullanın.

public void InsertExpandableData(ExpandableWeatherObject weatherObject)
{
    TableEntity entity = new TableEntity();
    entity.PartitionKey = weatherObject.StationName;
    entity.RowKey = weatherObject.ObservationDate;

    foreach (string propertyName in weatherObject.PropertyNames)
    {
        var value = weatherObject[propertyName];
        entity[propertyName] = value;
    }
    _tableClient.AddEntity(entity);
}

        
public void UpsertExpandableData(ExpandableWeatherObject weatherObject)
{
    TableEntity entity = new TableEntity();
    entity.PartitionKey = weatherObject.StationName;
    entity.RowKey = weatherObject.ObservationDate;

    foreach (string propertyName in weatherObject.PropertyNames)
    {
        var value = weatherObject[propertyName];
        entity[propertyName] = value;
    }
    _tableClient.UpsertEntity(entity);
}

Varlığı güncelleştirme

Varlıklar, TableClient nesne üzerinde UpdateEntity yöntemi çağrılarak güncelleştirilebilir. Tablo API'si kullanılarak depolanan bir varlık (satır) rastgele bir özellik kümesi içereyene kadar, daha önce ele alınana benzer bir Sözlük nesnesine dayalı bir güncelleştirme nesnesi oluşturmak ExpandableWeatherObject genellikle yararlıdır. Bu durumda tek fark, güncelleştirmeler sırasında eşzamanlılık Etag denetimi için kullanılan bir özelliğin ekseriyetini ifade eder.

public class UpdateWeatherObject
{
    public Dictionary<string, object> _properties = new Dictionary<string, object>();

    public string StationName { get; set; }
    public string ObservationDate { get; set; }
    public string Etag { get; set; }

    public object this[string name]
    {
        get => (ContainsProperty(name)) ? _properties[name] : null;
        set => _properties[name] = value;
    }

    public ICollection<string> PropertyNames => _properties.Keys;

    public int PropertyCount => _properties.Count;

    public bool ContainsProperty(string name) => _properties.ContainsKey(name);
}

Örnek uygulamada, bu nesne sınıfındaki UpdateEntity yöntemine TableService geçirildi. Bu yöntem ilk olarak TableClient üzerinde GetEntity yöntemini Tablo API'si var olan varlığı dosyadan yükler. Ardından bu varlık nesnesini günceller ve UpdateEntity güncelleştirmeleri veritabanına kaydetme yöntemini kullanır. UpdateEntity yönteminin nesnenin başlangıçta yüklendiğinden beri değişmediğinin doğrulanabilecek geçerli Etag'ini nasıl alır? Varlığı ne olursa olsun güncelleştirmek için yöntemine değerini Etag.Any UpdateEntity geçebilirsiniz.

public void UpdateEntity(UpdateWeatherObject weatherObject)
{
    string partitionKey = weatherObject.StationName;
    string rowKey = weatherObject.ObservationDate;

    // Use the partition key and row key to get the entity
    TableEntity entity = _tableClient.GetEntity<TableEntity>(partitionKey, rowKey).Value;

    foreach (string propertyName in weatherObject.PropertyNames)
    {
        var value = weatherObject[propertyName];
        entity[propertyName] = value;
    }

    _tableClient.UpdateEntity(entity, new ETag(weatherObject.Etag));
}

Varlığı kaldırma

Bir tablodaki varlığı kaldırmak için TableClient nesnesinde DeleteEntity yöntemini, nesnenin bölüm anahtarı ve satır anahtarıyla çağırabilirsiniz.

public void RemoveEntity(string partitionKey, string rowKey)
{
    _tableClient.DeleteEntity(partitionKey, rowKey);           
}

7 - Kodu çalıştırma

Cosmos DB veritabanı sunucusuyla etkileşim kurmak için örnek Tablo API'si. Uygulamayı ilk kez çalıştıracak olurken tablo boş olduğundan veri olmayacaktır. Tabloya veri eklemek için uygulamanın üst kısmında yer alan düğmelerden herhangi birini kullanın.

Tablo A P I'yi kullanarak Cosmos DB'ye veri eklemek için kullanılan düğmelerin konumunu gösteren uygulamanın ekran görüntüsü.

Tablo Varlığı kullanarak ekle düğmesinin seçerek bir nesnesi kullanarak yeni satır ekleme veya upsert oluşturma seçeneklerine sahip bir iletişim kutusu TableEntity açılır.

TableEntity nesnesi kullanarak veri eklemek için kullanılan iletişim kutusunu gösteren uygulamanın ekran görüntüsü.

Genişletilebilir Veri Kullanarak Ekle düğmesinin seçerek özel özelliklere sahip bir nesne eklemenizi sağlayan bir iletişim kutusu açılır ve Cosmos DB Tablo API'si'nin gerektiğinde tabloya özellikleri (sütunları) nasıl otomatik olarak ekley olduğunu gösterir. Bir veya daha fazla yeni özellik eklemek ve bu özelliği göstermek için Özel Alan Ekle düğmesini kullanın.

Özel alanları olan bir nesne kullanarak veri eklemek için kullanılan iletişim kutusunu gösteren uygulamanın ekran görüntüsü.

Cosmos DB Tablonıza bazı örnek verileri yüklemek için Örnek Veri Ekle düğmesini kullanın.

Örnek veri ekleme düğmesinin konumunu gösteren uygulamanın ekran görüntüsü.

Sonuçları Filtrele sayfasına alınacak üst menüden Sonuçları Filtrele öğesini seçin. Bu sayfada, bir filtre yan tümcesini nasıl yapıltır ve Cosmos DB veritabanına nasıl geçirebilirsiniz göstermek için filtre ölçütlerini Tablo API'si.

Filtre sonuçları sayfasını gösteren ve sayfaya gitmek için kullanılan menü öğesini vurgulayan uygulamanın ekran görüntüsü.

Kaynakları temizleme

Örnek uygulamayla bitirdikten sonra bu makaleyle ilgili tüm Azure kaynaklarını Azure hesabınızdan kaldırmanız gerekir. Bunu yapmak için kaynak grubunu silebilirsiniz.

Kaynak grubu, aşağıdaki Azure portal kullanılarak silinebilir.

Yönergeler Ekran görüntüsü
Kaynak grubuna gitmek için, arama çubuğunda kaynak grubunun adını yazın. Sonra kaynak grupları sekmesinde kaynak grubunun adını seçin. Kaynak grubu aramanın nasıl olduğunu gösteren ekran görüntüsü.
Kaynak grubu sayfasının en üstündeki araç çubuğundan kaynak grubunu sil ' i seçin. Kaynak grubunu sil düğmesinin konumunu gösteren ekran görüntüsü.
Kaynak grubunun silinmesini onaylamanızı isteyen ekranın sağ tarafındaki bir iletişim kutusu açılır.
  1. Silmeyi onaylamak için, metin kutusuna kaynak grubunun tam adını yazın.
  2. Sayfanın alt kısmındaki Sil düğmesini seçin.
Kaynak grubunu silme onayı iletişim kutusunu gösteren ekran görüntüsü.

Sonraki adımlar

Bu hızlı başlangıçta Azure Cosmos DB hesabı oluşturmayı, Veri Gezgini'ni kullanarak tablo oluşturmayı ve bir uygulamayı çalıştırmayı öğrendiniz. Şimdi Tablo API'sini kullanarak verilerinizi sorgulayabilirsiniz.