Aracılığıyla paylaş


.NET Aspire Pomelo MySQLEntity Framework Core tümleştirmesi

Içerir:Barındırma tümleştirmesi dahil Barındırma tümleştirmesi —& Client tümleştirme dahilClient tümleştirme

MySQL, verileri yönetmek ve işlemek için Yapılandırılmış Sorgu Dili (SQL) kullanan açık kaynak bir İlişkisel Veritabanı Yönetim Sistemidir (RDBMS). Küçük projelerden büyük ölçekli kurumsal sistemlere kadar birçok farklı ortamda kullanılır ve buluta özel bir uygulamada mikro hizmetleri destekleyen verileri barındırmak popüler bir seçimdir. .NET Aspire Pomelo MySQLEntity Framework Core tümleştirmesi, mevcut MySQL veritabanlarına bağlanmanıza veya .NETile mysql'dan yeni örnekler oluşturmanıza olanak tanır.

Barındırma entegrasyonu

MySQL barındırma tümleştirmesi, sunucuyu MySqlServerResource türü ve veritabanını MySqlDatabaseResource türü olarak modeller. Bu türlere ve API'lere erişmek için 📦 projesinde Aspire.Hosting.MySql NuGet paketini ekleyin.

dotnet add package Aspire.Hosting.MySql

Daha fazla bilgi için bkz. dotnet add package veya .NET uygulamalarında paket bağımlılıklarını yönetme.

MySQL sunucu kaynağı ve veritabanı kaynağı ekleme

Uygulama ana bilgisayar projenizde AddMySql çağırarak bir MySQL kaynak oluşturucu ekleyin ve döndürin. Döndürülen kaynak oluşturucusunun çağrısını zincirleyin ve AddDatabase kaynağına MySQL veritabanı kaynağı ekleyin.

var builder = DistributedApplication.CreateBuilder(args);

var mysql = builder.AddMySql("mysql")
                   .WithLifetime(ContainerLifetime.Persistent);

var mysqldb = mysql.AddDatabase("mysqldb");

var myService = builder.AddProject<Projects.ExampleProject>()
                       .WithReference(mysqldb)
                       .WaitFor(mysqldb);

// After adding all resources, run the app...

Not olarak

SQL Server kapsayıcısı yavaş başlatıldığından, gereksiz yeniden başlatmaları önlemek için kalıcı ömür döngüsünü kullanmak en iyisidir. Daha fazla bilgi için bkz. kapsayıcı kaynak ömrü.

.NET .NET Aspire, önceki örnekte mysql görüntüsüyle gösterildiği gibi uygulama konağına bir kapsayıcı görüntüsü eklediğinde, yerel makinenizde yeni bir MySQL örneği oluşturur. Veritabanı eklemek için MySQL kaynak oluşturucunuza (mysql değişkeni) başvuru kullanılır. Veritabanı mysqldb olarak adlandırılır ve ardından ExampleProject'e eklenir. MySQL kaynağı, usernameroot ve password yöntemi kullanılarak oluşturulan rastgele bir CreateDefaultPasswordParameter içeren varsayılan kimlik bilgilerini içerir.

Uygulama sunucusu çalıştırıldığında, parola uygulama sunucusunun gizli deposunda saklanır. Parameters bölümüne eklenir, örneğin:

{
  "Parameters:mysql-password": "<THE_GENERATED_PASSWORD>"
}

Parametrenin adı mysql-password, ama aslında sadece kaynak adını -password sonekiyle biçimlendiriyor. Daha fazla bilgi için geliştirme aşamasında uygulama gizli bilgilerinin güvenli depolanması bölümüne bakınız ve ASP.NET Coreparametreleriyle kaynağı ekleyin MySQL.

WithReference yöntemi, ExampleProject'deki mysqldbadlı bağlantıyı yapılandırır.

İpucu

Mevcut bir MySQL sunucusuna bağlanmak isterseniz bunun yerine AddConnectionString'ı arayın. Daha fazla bilgi için bkz. Var olan kaynaklara başvurma.

Veri birimiyle MySQL kaynağı ekleyin.

SQL Server kaynağına veri birimi eklemek için WithDataVolume kaynağında SQL Server yöntemini çağırın:

var builder = DistributedApplication.CreateBuilder(args);

var mysql = builder.AddMySql("mysql")
                   .WithDataVolume();

var mysqldb = mysql.AddDatabase("mysqldb");

builder.AddProject<Projects.ExampleProject>()
       .WithReference(mysqldb)
       .WaitFor(mysqldb);

// After adding all resources, run the app...

Veri hacmi, MySQL sunucu verilerini kapsayıcısının yaşam döngüsü dışında kalıcı hale getirmek için kullanılır. Veri birimi, /var/lib/mysql kapsayıcısının SQL Server yoluna bağlanır ve name parametresi sağlanmazsa ad rastgele oluşturulur. Veri hacimleri hakkında daha fazla bilgi ve neden bağlamalarıyerine tercih edildiklerine ilişkin ayrıntılar için Docker belgelerine bakınız: Birimler.

Uyarı

Parola, veri biriminde depolanır. Veri birimi kullanıldığında ve parola değiştiğinde, birimi silene kadar çalışmayacaktır.

Önemli

Bazı veritabanı tümleştirmeleri, .NET AspireMySQL tümleştirmesi de dahil olmak üzere, Azure Container Apps (ACA) ortamına dağıtıldıktan sonra veri birimlerini başarıyla kullanamaz. Bunun nedeni, ACA'nın kapsayıcıları veri birimlerine bağlamak için İleti Bloğu 'nu (SMB) kullanması Server ve bazı sistemlerin bu bağlantıyı kullanamamalarıdır. Pano'da Aspire , bu sorundan etkilenen bir veritabanının Durumu Etkinleştirme veya Etkinleştirme Başarısız oldu ancak hiçbir zaman Çalışıyor olarak listelenmez.

Bir Kubernetes kümeye, örneğin AzureKubernetes Hizmetler (AKS)'e dağıtım yaparak sorunu çözebilirsiniz. Daha fazla bilgi için .NET.NET Aspire dağıtımlarıbkz.

MySQL kaynağını veri bağlama ile ekleyin

MySQL kaynağına veri bağlaması eklemek için WithDataBindMount yöntemini çağırın:

var builder = DistributedApplication.CreateBuilder(args);

var mysql = builder.AddMySql("mysql")
                   .WithDataBindMount(source: @"C:\MySql\Data");

var db = sql.AddDatabase("mysqldb");

builder.AddProject<Projects.ExampleProject>()
       .WithReference(mysqldb)
       .WaitFor(mysqldb);

// After adding all resources, run the app...

Önemli

Veri bağlama bağlamaları, daha iyi performans, taşınabilirlik ve güvenlik sunanbirimleriyle karşılaştırıldığında sınırlı işlevselliğe sahiptir ve bu da üretim ortamları için daha uygun olmasını sağlar. Ancak bind mounts, geliştirme ve test sırasında gerçek zamanlı değişiklikler gerektiğinde konak sistemdeki dosyalara doğrudan erişim ve değişiklik yapma imkanı sağlayarak ideal bir çözüm sunar.

Kapsayıcı yeniden başlatmaları arasında MySQL verilerini sürekli tutmak için veri bağlamaları, konak makinenin dosya sistemine dayanır. Veri bağlama, C:\MySql\Data kapsayıcısında, konak makinedeki Windows üzerindeki /MySql/Data yoluna (veya Unixüzerindeki MySQL yoluna) monte edilir. Veri bağlamaları hakkında daha fazla bilgi için Docker belgelerine bakın: Bağlamaları Bağlama.

Parametrelerle MySQL kaynağı ekleme

Kök MySQL parolasını açıkça belirtmek istediğinizde, bunu bir parametre olarak geçirebilirsiniz. Aşağıdaki alternatif örneği göz önünde bulundurun:

var password = builder.AddParameter("password", secret: true);

var mysql = builder.AddMySql("mysql", password)
                   .WithLifetime(ContainerLifetime.Persistent);

var mysqldb = mysql.AddDatabase("mysqldb");

var myService = builder.AddProject<Projects.ExampleProject>()
                       .WithReference(mysqldb)
                       .WaitFor(mysqldb);

Daha fazla bilgi için bkz.dış parametreler.

PhpMyAdmin kaynağı ekleme

phpMyAdmin, MySQLiçin popüler bir web tabanlı yönetim aracıdır. Veritabanları, tablolar, görünümler ve dizinler gibi MySQL nesnelere göz atmak ve bunları değiştirmek için kullanabilirsiniz. .NET .NET Aspire çözümünüzde phpMyAdmin kullanmak için WithPhpMyAdmin yöntemini çağırın. Bu yöntem, phpMyAdmin'i barındıran çözüme yeni bir kapsayıcı kaynağı ekler ve bunu MySQL kapsayıcısına bağlar:

var builder = DistributedApplication.CreateBuilder(args);

var mysql = builder.AddMySql("mysql")
                   .WithPhpMyAdmin();

var db = sql.AddDatabase("mysqldb");

builder.AddProject<Projects.ExampleProject>()
       .WithReference(mysqldb)
       .WaitFor(mysqldb);

// After adding all resources, run the app...

Çözümü çalıştırdığınızda, .NET.NET Aspire panosu phpMyAdmin kaynaklarını bir uç noktayla görüntüler. PhpMyAdmin'i yeni bir tarayıcı sekmesinde görüntülemek için uç nokta bağlantısını seçin.

Barındırma entegrasyon sağlık kontrolleri

MySQL barındırma tümleştirmesi, MySQL kaynağı için otomatik olarak bir sistem durumu denetimi ekler. Sistem durumu denetimi, MySQL sunucusunun çalıştığını ve bu sunucuyla bağlantı kurulabileceğini doğrular.

Barındırma tümleştirmesi, 📦 AspNetCore.HealthChecks.MySql NuGet paketine dayanır.

Client entegrasyonu

.NET Aspire Pomelo MySQL Entity Framework tümleştirmesine başlamak için, istemciyi kullanan yani 📦Aspire istemcisini barındıran uygulama projesine NuGet paketini yükleyin.

dotnet add package Aspire.Pomelo.EntityFrameworkCore.MySql

Daha fazla bilgi için bkz. dotnet add package veya .NET uygulamalarında paket bağımlılıklarını yönetme.

Bir MySQL veritabanı bağlamı ekleme

İstemci kullanan projenizin Program.cs dosyasında, herhangi bir AddMySqlDbContext üzerinde IHostApplicationBuilder uzantı yöntemini çağırarak bağımlılık ekleme kapsayıcısı aracılığıyla kullanılmak üzere bir DbContext kaydedin. yöntemi bir bağlantı adı parametresi alır.

builder.AddMySqlDbContext<ExampleDbContext>(connectionName: "mysqldb");

İpucu

connectionName parametresi, uygulama ana bilgisayar projesine SQL Server veritabanı kaynağı eklenirken kullanılan adla eşleşmelidir. Başka bir deyişle, AddDatabase'ı çağırdığınızda ve mysqldb'yi çağırırken, AddMySqlDbContext olarak sağladığınız aynı isim kullanılmalıdır. Daha fazla bilgi için bkz. MySQL sunucu kaynağı ve veritabanı kaynağı ekleme.

Bir hizmetten ExampleDbContext nesnesi almak için:

public class ExampleService(ExampleDbContext context)
{
    // Use context...
}

Bağımlılık ekleme hakkında daha fazla bilgi için bkz. .NET bağımlılık ekleme.

Bir MySQL veritabanı bağlamını zenginleştir.

Veritabanı bağlamını almak ve bunu bağımlılık ekleme kapsayıcısına eklemek için standart Entity Framework yöntemini kullanmayı tercih edebilirsiniz:

builder.Services.AddDbContext<ExampleDbContext>(options =>
    options.UseMySql(builder.Configuration.GetConnectionString("mysqldb")
        ?? throw new InvalidOperationException("Connection string 'mysqldb' not found.")));

Not olarak

GetConnectionString yöntemine geçirdiğiniz bağlantı dizesi adı, uygulama ana bilgisayar projesine MySQL kaynağı eklenirken kullanılan adla eşleşmelidir. Daha fazla bilgi için bkz. MySQL sunucu kaynağı ve veritabanı kaynağı ekleme.

Veritabanı bağlamını bu şekilde oluştururken daha fazla esnekliğe sahip olursunuz, örneğin:

  • var olan yapılandırma kodunu .NET.NET Aspireiçin yeniden yazmadan veritabanı bağlamı için yeniden kullanabilirsiniz.
  • Veritabanı işlemlerini değiştirmek için Entity Framework Core önleyiciler kullanabilirsiniz.
  • Bazı durumlarda daha iyi performans gösterebilecek Entity Framework Core bağlam havuzu kullanmamayı seçebilirsiniz.

Bu yöntemi kullanırsanız, .NET yöntemini çağırarak veritabanı bağlamını .NET AspireEnrichMySqlDbContextstili yeniden denemeler, sistem durumu denetimleri, günlüğe kaydetme ve telemetri özellikleriyle geliştirebilirsiniz:

builder.EnrichMySqlDbContext<ExampleDbContext>(
    configureSettings: settings =>
    {
        settings.DisableRetry = false;
        settings.CommandTimeout = 30 // seconds
    });

settings parametresi, PomeloEntityFrameworkCoreMySqlSettings sınıfının bir örneğidir.

Konfigürasyon

.NET Aspire Pomelo MySQLEntity Framework Core tümleştirmesi, veritabanı bağlantısını projenizin gereksinimlerine ve kurallarına göre yapılandırmak için birden çok seçenek sağlar.

Bağlantı dizesi kullanma

ConnectionStrings yapılandırma bölümünden bir bağlantı dizesi kullanırken, builder.AddMySqlDatabaseDbContext<TContext>()çağırırken bağlantı dizesinin adını sağlayabilirsiniz:

builder.AddMySqlDatabaseDbContext<MyDbContext>("mysql");

Ardından bağlantı dizesi ConnectionStrings yapılandırma bölümünden alınır:

{
  "ConnectionStrings": {
    "mysql": "Server=mysql;Database=mysqldb"
  }
}

EnrichMySqlDbContext, bir ConnectionStrings'nin çağrıldığı noktada kaydedilmesini beklediğinden, DbContext yapılandırma bölümünü kullanmayacak.

Daha fazla bilgi için MySqlConnector: ConnectionString belgelerinebakın.

Yapılandırma sağlayıcılarını kullanma

.NET Aspire Pomelo MySQLEntity Framework Core tümleştirmesi Microsoft.Extensions.Configuration'ü destekler. PomeloEntityFrameworkCoreMySqlSettings anahtarını kullanarak appsettings.json gibi yapılandırma dosyalarından Aspire:Pomelo:EntityFrameworkCore:MySql yükler.

Aşağıdaki örnekte, kullanılabilir seçeneklerden bazılarını yapılandıran bir appsettings.json gösterilmektedir:

{
  "Aspire": {
    "Pomelo": {
      "EntityFrameworkCore": {
        "MySql": {
          "ConnectionString": "YOUR_CONNECTIONSTRING",
          "DisableHealthChecks": true,
          "DisableTracing": true
        }
      }
    }
  }
}

Tam MySQL tümleştirme JSON şemasını görmek için bkz. Aspire. Pomelo.EntityFrameworkCore.MySql/ConfigurationSchema.json.

Satır içi temsilcileri kullanın

Ayrıca bazı ya da tüm seçenekleri satır içi ayarlamak için Action<PomeloEntityFrameworkCoreMySqlSettings> temsilcisini de geçirebilirsiniz; örneğin, koddan sağlık kontrollerini devre dışı bırakmak için.

builder.AddMySqlDbContext<MyDbContext>(
    "mysqldb",
    static settings => settings.DisableHealthChecks = true);

veya

builder.EnrichMySqlDbContext<MyDbContext>(
    static settings => settings.DisableHealthChecks = true);

Client entegrasyon sağlık kontrolleri

Varsayılan olarak, tüm hizmetler için .NET.NET Aspireistemci entegrasyonlarısağlık kontrolleri ile etkindir. Benzer şekilde, birçok .NET.NET Aspirebarındırma entegrasyonu sağlık kontrol uç noktalarını da etkinleştirir. Daha fazla bilgi için bkz:

.NET Aspire Pomelo MySQLEntity Framework Core tümleştirmesi:

Gözlemlenebilirlik ve telemetri

.NET .NET Aspire tümleştirmeleri, bazen gözlemlenebilirliğin sütunlarıolarak bilinen, Günlük, İzleme ve Ölçüm yapılandırmalarını otomatik olarak ayarlar. Tümleştirme gözlemlenebilirliği ve telemetri hakkında daha fazla bilgi için bkz. tümleştirmelere genel bakış. Yedekleme hizmetine bağlı olarak, bazı tümleştirmeler bu özelliklerden yalnızca bazılarını destekleyemeyebilir. Örneğin, bazı tümleştirmeler günlüğe kaydetmeyi ve izlemeyi destekler, ancak ölçümleri desteklemez. Telemetri özellikleri, Yapılandırma bölümünde sunulan teknikler kullanılarak da devre dışı bırakılabilir.

Loglama

.NET Aspire Pomelo MySQLEntity Framework Core tümleştirmesi aşağıdaki günlük kategorilerini kullanır:

  • Microsoft.EntityFrameworkCore.ChangeTracking
  • Microsoft.EntityFrameworkCore.Database.Command
  • Microsoft.EntityFrameworkCore.Database.Connection
  • Microsoft.EntityFrameworkCore.Database.Transaction
  • Microsoft.EntityFrameworkCore.Infrastructure
  • Microsoft.EntityFrameworkCore.Migrations
  • Microsoft.EntityFrameworkCore.Model
  • Microsoft.EntityFrameworkCore.Model.Validation
  • Microsoft.EntityFrameworkCore.Query
  • Microsoft.EntityFrameworkCore.Update

İzleme

.NET Aspire Pomelo MySQLEntity Framework Core tümleştirmesi, OpenTelemetrykullanarak aşağıdaki izleme etkinliklerini oluşturacaktır.

  • MySqlConnector

Ölçüm

.NET Aspire Pomelo MySQLEntity Framework Core tümleştirmesi şu anda aşağıdaki ölçümleri destekler:

  • MySqlConnector:
    • db.client.connections.create_time
    • db.client.connections.use_time
    • db.client.connections.wait_time
    • db.client.connections.idle.max
    • db.client.connections.idle.min
    • db.client.connections.max
    • db.client.connections.pending_requests
    • db.client.connections.timeouts
    • db.client.connections.usage

Ayrıca bkz.