Entity Framework Core araçları başvurusu - .NET Core CLI

Entity Framework Core için komut satırı arabirimi (CLI) araçları tasarım zamanı geliştirme görevlerini gerçekleştirir. Örneğin, geçişler oluşturur, geçişleri uygular ve var olan bir veritabanını temel alan bir model için kod oluşturur. Komutlar, .NET Core SDK'sının bir parçası olan platformlar arası dotnet komutunun uzantısıdır. Bu araçlar .NET Core projeleriyle çalışır.

Visual Studio kullanırken CLI araçları yerine Paket Yöneticisi Konsolu araçlarını kullanmayı göz önünde bulundurun. Konsol araçlarını otomatik olarak Paket Yöneticisi:

  • dizinleri el ile değiştirmenizi gerektirmeden Paket Yöneticisi Konsolu'nda seçilen geçerli projeyle çalışır.
  • Komut tamamlandıktan sonra komut tarafından oluşturulan dosyaları açar.
  • Komutların, parametrelerin, proje adlarının, bağlam türlerinin ve geçiş adlarının sekmeyle tamamlanmasını sağlar.

Araçları yükleme

dotnet ef genel veya yerel bir araç olarak yüklenebilir. Geliştiricilerin çoğu aşağıdaki komutu kullanarak genel bir araç olarak yüklemeyi dotnet ef tercih eder:

dotnet tool install --global dotnet-ef

Bunu yerel bir araç olarak kullanmak için, bir araç bildirim dosyası kullanarak bunu araç bağımlılığı olarak bildiren bir projenin bağımlılıklarını geri yükleyin.

Aşağıdaki komutu kullanarak aracı güncelleştirin:

dotnet tool update --global dotnet-ef

Belirli bir projedeki araçları kullanabilmeniz için paketi buna eklemeniz Microsoft.EntityFrameworkCore.Design gerekir.

dotnet add package Microsoft.EntityFrameworkCore.Design

Yüklemeyi doğrulama

EF Core CLI araçlarının doğru yüklendiğini doğrulamak için aşağıdaki komutları çalıştırın:

dotnet ef

Komutun çıkışı, kullanımda olan araçların sürümünü tanımlar:


                     _/\__
               ---==/    \\
         ___  ___   |.    \|\
        | __|| __|  |  )   \\\
        | _| | _|   \_/ |  //|\\
        |___||_|       /   \\\/\\

Entity Framework Core .NET Command-line Tools 2.1.3-rtm-32065

<Usage documentation follows, not shown.>

Araçları güncelleştirme

Genel araçları kullanılabilir en son sürüme güncelleştirmek için kullanın dotnet tool update --global dotnet-ef . Projenizde yerel olarak yüklü araçlar varsa kullanın dotnet tool update dotnet-ef. Komutunun sonuna ekleyerek --version <VERSION> belirli bir sürümü yükleyin. Diğer ayrıntılar için dotnet aracı belgelerinin Güncelleştirme bölümüne bakın.

Araçları kullanma

Araçları kullanmadan önce bir başlangıç projesi oluşturmanız veya ortamı ayarlamanız gerekebilir.

Hedef proje ve başlangıç projesi

Komutlar bir projeye ve başlangıç projesine başvurur.

  • Proje, komutların dosyaları eklediği veya kaldırdığı yer olduğundan hedef proje olarak da bilinir. Varsayılan olarak, geçerli dizindeki proje hedef projedir. seçeneğini kullanarak --project hedef proje olarak farklı bir proje belirtebilirsiniz.

  • Başlangıç projesi, araçların derleyip çalıştırdığını projedir . Veritabanı bağlantı dizesi ve modelin yapılandırması gibi proje hakkında bilgi almak için araçların tasarım zamanında uygulama kodunu yürütmesi gerekir. Varsayılan olarak, geçerli dizindeki proje başlangıç projesidir. seçeneğini kullanarak --startup-project başlangıç projesi olarak farklı bir proje belirtebilirsiniz.

Başlangıç projesi ve hedef proje genellikle aynı projedir. Bunların ayrı projeler olduğu tipik bir senaryo şunlardır:

  • EF Core bağlamı ve varlık sınıfları bir .NET Core sınıf kitaplığındadır.
  • .NET Core konsol uygulaması veya web uygulaması sınıf kitaplığına başvurur.

Geçiş kodunu EF Core bağlamından ayrı bir sınıf kitaplığına yerleştirmek de mümkündür.

Diğer hedef çerçeveler

CLI araçları .NET Core projeleri ve .NET Framework projeleriyle çalışır. .NET Standart sınıf kitaplığında EF Core modeli olan uygulamaların .NET Core veya .NET Framework projesi olmayabilir. Örneğin bu, Xamarin ve Evrensel Windows Platformu uygulamaları için geçerlidir. Bu gibi durumlarda, tek amacı araçlar için başlangıç projesi olarak hareket etmek olan bir .NET Core konsol uygulaması projesi oluşturabilirsiniz. Proje, gerçek kodu olmayan sahte bir proje olabilir; yalnızca araçlar için bir hedef sağlamak için gereklidir.

Neden sahte bir proje gereklidir? Daha önce belirtildiği gibi, araçların tasarım zamanında uygulama kodunu yürütmesi gerekir. Bunu yapmak için .NET Core çalışma zamanını kullanmaları gerekir. EF Core modeli .NET Core veya .NET Framework hedefleyen bir projede olduğunda, EF Core araçları çalışma zamanını projeden ödünç alır. EF Core modeli bir .NET Standart sınıf kitaplığındaysa bunu yapamazlar. .NET Standard gerçek bir .NET uygulaması değildir; .NET uygulamalarının desteklemesi gereken bir DIZI API'nin belirtimidir. Bu nedenle EF Core araçlarının uygulama kodunu yürütmesi için .NET Standard yeterli değildir. Başlangıç projesi olarak kullanmak üzere oluşturduğunuz sahte proje, araçların .NET Standart sınıf kitaplığını yükleyebileceği somut bir hedef platform sağlar.

ASP.NET Core ortamı

ASP.NET Core projeleri için ortamı komut satırında belirtebilirsiniz. Bu ve tüm ek bağımsız değişkenler Program.CreateHostBuilder'a geçirilir.

dotnet ef database update -- --environment Production

İpucu

Belirteç, -- izleyen her şeyi bağımsız değişken olarak ele almaya yönlendirir dotnet ef ve bunları seçenek olarak ayrıştırmaya çalışmaz. tarafından dotnet ef kullanılmayan ek bağımsız değişkenler uygulamaya iletilir.

Ortak seçenekler

Seçenek Kısa Açıklama
--json JSON çıkışını göster.
--context <DBCONTEXT> -c DbContext Kullanılacak sınıf. Yalnızca sınıf adı veya ad alanlarıyla tam olarak nitelenmiş. Bu seçenek atlanırsa EF Core bağlam sınıfını bulur. Birden çok bağlam sınıfı varsa, bu seçenek gereklidir.
--project <PROJECT> -p Hedef projenin proje klasörünün göreli yolu. Varsayılan değer geçerli klasördür.
--startup-project <PROJECT> -s Başlangıç projesinin proje klasörünün göreli yolu. Varsayılan değer geçerli klasördür.
--framework <FRAMEWORK> Hedef çerçeve için Hedef Çerçeve Takma Adı. Proje dosyası birden çok hedef çerçeve belirttiğinde ve bunlardan birini seçmek istediğinizde kullanın.
--configuration <CONFIGURATION> Derleme yapılandırması, örneğin: Debug veya Release.
--runtime <IDENTIFIER> Paketlerinin geri yükleneceği hedef çalışma zamanının tanımlayıcısı. Çalışma Zamanı Tanımlayıcılarının (RID) listesi için RID kataloğuna bakın.
--no-build Projeyi oluşturmayın. Derleme güncel olduğunda kullanılmak üzere tasarlanmıştır.
--help -h Yardım bilgilerini gösterin.
--verbose -v Ayrıntılı çıkışı göster.
--no-color Çıkışı renklendirmayın.
--prefix-output Düzeyli ön ek çıkışı.

Tüm ek bağımsız değişkenler uygulamaya geçirilir.

dotnet ef database drop

Veritabanını siler.

Seçenekler:

Seçenek Kısa Açıklama
--force -f Bunu onaylama.
--dry-run Hangi veritabanının bırakacağını gösterin, ancak bırakmayın.

Yaygın seçenekler yukarıda listelenmiştir.

dotnet ef database update

Veritabanını son geçişe veya belirtilen geçişe güncelleştirir.

Bağımsız Değişkenler:

Bağımsız değişken Açıklama
<MIGRATION> Hedef geçiş. Geçişler ada veya kimlikle tanımlanabilir. 0 sayısı, ilk geçişten önce anlamına gelen ve tüm geçişlerin geri alınmasına neden olan özel bir durumdur. Herhangi bir geçiş belirtilmezse, komut varsayılan olarak son geçişe ayarlanır.

Seçenekler:

Seçenek Açıklama
--connection <CONNECTION> Veritabanına bağlantı dizesi. varsayılan olarak veya OnConfiguringiçinde belirtilen değeri AddDbContext kullanır.

Yaygın seçenekler yukarıda listelenmiştir.

Aşağıdaki örnekler veritabanını belirtilen bir geçişe güncelleştirir. Birincisi geçiş adını, ikincisi ise geçiş kimliğini ve belirtilen bağlantıyı kullanır:

dotnet ef database update InitialCreate
dotnet ef database update 20180904195021_InitialCreate --connection your_connection_string

dotnet ef dbcontext info

Bir DbContext tür hakkında bilgi alır.

Yaygın seçenekler yukarıda listelenmiştir.

dotnet ef dbcontext list

Kullanılabilir DbContext türleri listeler.

Yaygın seçenekler yukarıda listelenmiştir.

dotnet ef dbcontext optimize

ve sorguları tarafından DbContext kullanılan modelin derlenmiş bir sürümünü oluşturur.

Daha fazla bilgi için bkz . Derlenmiş modeller .

Seçenekler:

Seçenek Kısa Açıklama
--output-dir <PATH> -o Dosyaları yerleştirecek dizin. Yollar proje dizinine göredir.
--namespace <NAMESPACE> -n Oluşturulan tüm sınıflar için kullanılacak ad alanı. Varsayılan olarak kök ad alanından ve çıkış dizininden artı CompiledModelsolarak oluşturulur.
--suffix <SUFFIX> Oluşturulan tüm dosyaların adına eklenecek sonek. Örneğin .g , bu dosyaların oluşturulan kod içerdiğini belirtmek için kullanılabilir
--no-scaffold Derlenmiş model oluşturmayın. Bu, derlenmiş model zaten oluşturulduğunda kullanılır.
--precompile-queries Önceden derlenmiş sorgular oluşturun. Hedef proje herhangi bir sorgu içeriyorsa bu, NativeAOT derlemesi için gereklidir
--nativeaot NativeAOT derlemesi ve önceden derlenmiş sorgular için gereken derlenmiş modelde ek kod oluşturma

Not

NativeAOT desteği ve önceden derlenmiş sorgular EF 9'da deneysel olarak kabul edilir ve sonraki sürümde önemli ölçüde değişebilir.

Yaygın seçenekler yukarıda listelenmiştir.

Aşağıdaki örnek varsayılan ayarları kullanır ve projede yalnızca bir tane DbContext varsa çalışır:

dotnet ef dbcontext optimize

Aşağıdaki örnek, belirtilen ada sahip bağlam için modeli iyileştirir ve ayrı bir klasöre ve ad alanına yerleştirir:

dotnet ef dbcontext optimize -o Models -n BlogModels -c BlogContext

dotnet ef dbcontext scaffold

Bir veritabanı için DbContext ve varlık türleri için kod oluşturur. Bu komutun bir varlık türü oluşturması için veritabanı tablosunun birincil anahtarı olmalıdır.

Bağımsız Değişkenler:

Bağımsız değişken Açıklama
<CONNECTION> Veritabanına bağlantı dizesi. ASP.NET Core 2.x projeleri için değer name=<name bağlantı dizesi> olabilir. Bu durumda ad, proje için ayarlanan yapılandırma kaynaklarından gelir.
<PROVIDER> Kullanılacak sağlayıcı. Bu genellikle NuGet paketinin adıdır, örneğin: Microsoft.EntityFrameworkCore.SqlServer.

Seçenekler:

Seçenek Kısa Açıklama
--data-annotations -d Modeli yapılandırmak için öznitelikleri kullanın (mümkün olduğunda). Bu seçenek atlanırsa yalnızca akıcı API kullanılır.
--context <NAME> -c Oluşturulacak sınıfın DbContext adı.
--context-dir <PATH> Sınıf dosyasını yerleştirecek DbContext dizin. Yollar proje dizinine göredir. Ad alanları klasör adlarından türetilir.
--context-namespace <NAMESPACE> Oluşturulan DbContext sınıf için kullanılacak ad alanı. Not: geçersiz kılar --namespace.
--force -f Varolan dosyaların üzerine yaz.
--output-dir <PATH> -o Varlık sınıfı dosyalarının yerleştirleneceği dizin. Yollar proje dizinine göredir.
--namespace <NAMESPACE> -n Oluşturulan tüm sınıflar için kullanılacak ad alanı. Varsayılan olarak kök ad alanından ve çıkış dizininden oluşturulur.
--schema <SCHEMA_NAME>... Varlık türlerinin oluşturulacağı tablo ve görünümlerin şemaları. Birden çok şema belirtmek için her şema için aynı işlemi yineleyin --schema . Bu seçenek atlanırsa, tüm şemalar eklenir. Bu seçenek kullanılırsa, şemalardaki tüm tablolar ve görünümler açıkça --table kullanılarak dahil edilmese bile modele dahil edilir.
--table <TABLE_NAME>... -t Varlık türlerinin oluşturulacağı tablolar ve görünümler. Birden çok tablo belirtmek için, her biri için veya --table yineleyin-t. Belirli bir şemadaki tablolar veya görünümler 'schema.table' veya 'schema.view' biçimi kullanılarak eklenebilir. Bu seçenek atlanırsa, tüm tablolar ve görünümler dahil edilir.
--use-database-names Tablo, görünüm, sıra ve sütun adlarını veritabanında göründükleri şekilde kullanın. Bu seçenek atlanırsa, veritabanı adları C# ad stili kurallarına daha yakın olacak şekilde değiştirilir.
--no-onconfiguring Oluşturulan DbContext sınıfta yönteminin OnConfiguring oluşturulmasını bastırır.
--no-pluralize Çoğullaştırıcıyı kullanma.

Yaygın seçenekler yukarıda listelenmiştir.

Aşağıdaki örnek tüm şemaları ve tabloların iskelesini oluşturur ve yeni dosyaları Modeller klasörüne yerleştirir.

dotnet ef dbcontext scaffold "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -o Models

Aşağıdaki örnek yalnızca seçili tabloların iskelesini oluşturur ve bağlamı belirtilen ad ve ad alanına sahip ayrı bir klasörde oluşturur:

dotnet ef dbcontext scaffold "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -o Models -t Blog -t Post --context-dir Context -c BlogContext --context-namespace New.Namespace

Aşağıdaki örnek, Gizli Dizi Yöneticisi aracını kullanarak projenin yapılandırma kümesinden bağlantı dizesi okur.

dotnet user-secrets set ConnectionStrings:Blogging "Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=Blogging"
dotnet ef dbcontext scaffold Name=ConnectionStrings:Blogging Microsoft.EntityFrameworkCore.SqlServer

Aşağıdaki örnek, bir OnConfiguring yöntemin iskelesini atlar. Bu, DbContext'i sınıfın dışında yapılandırmak istediğinizde yararlı olabilir. Örneğin, ASP.NET Core uygulamaları genellikle Startup.ConfigureServices içinde yapılandırılır.

dotnet ef dbcontext scaffold "Server=(localdb)\mssqllocaldb;Database=Blogging;User Id=myUsername;Password=myPassword;" Microsoft.EntityFrameworkCore.SqlServer --no-onconfiguring

dotnet ef dbcontext script

DbContext'ten bir SQL betiği oluşturur. Geçişleri atlar.

Seçenekler:

Seçenek Kısa Açıklama
--output <FILE> -o Sonucu yazacak dosya.

Yaygın seçenekler yukarıda listelenmiştir.

dotnet ef migrations add

Yeni bir geçiş ekler.

Bağımsız Değişkenler:

Bağımsız değişken Açıklama
<NAME> Geçişin adı.

Seçenekler:

Seçenek Kısa Açıklama
--output-dir <PATH> -o Dizin, dosyaların çıktısını almak için kullanır. Yollar hedef proje dizinine göredir. Varsayılan olarak "Geçişler" kullanılır.
--namespace <NAMESPACE> -n Oluşturulan sınıflar için kullanılacak ad alanı. Varsayılan olarak çıkış dizininden oluşturulur.

Yaygın seçenekler yukarıda listelenmiştir.

dotnet ef migrations bundle

Veritabanını güncelleştirmek için bir yürütülebilir dosya oluşturur.

Seçenekler:

Seçenek Kısa Açıklama
--output <FILE> -o Oluşturulacak yürütülebilir dosyanın yolu.
--force -f Varolan dosyaların üzerine yaz.
--self-contained Ayrıca makineye yüklenmesi gerekmeyecek şekilde .NET çalışma zamanını paketleyin.
--target-runtime <RUNTIME_IDENTIFIER> -r Paketlenecek hedef çalışma zamanı.

Yaygın seçenekler yukarıda listelenmiştir.

dotnet ef migrations has-pending-model-changes

Not

Bu komut EF Core 8.0'a eklendi.

Son geçişten sonra modelde herhangi bir değişiklik yapılıp yapılmadığını denetler.

Seçenekler:

Yaygın seçenekler yukarıda listelenmiştir.

dotnet ef migrations list

Kullanılabilir geçişleri listeler.

Seçenekler:

Seçenek Açıklama
--connection <CONNECTION> Veritabanına bağlantı dizesi. AddDbContext veya OnConfiguring içinde belirtilen varsayılan değerdir.
--no-connect Veritabanına bağlanma.

Yaygın seçenekler yukarıda listelenmiştir.

dotnet ef migrations remove

Son geçişi kaldırır ve en son geçiş için yapılan kod değişikliklerini geri alır.

Seçenekler:

Seçenek Kısa Açıklama
--force -f En son geçiş için yapılan hem kod hem de veritabanı değişikliklerini geri döndürerek en son geçişi geri alın. Yalnızca veritabanına bağlanırken bir hata oluştuğunda kod değişiklikleri geri almaya devam eder.

Yaygın seçenekler yukarıda listelenmiştir.

dotnet ef migrations script

Geçişlerden bir SQL betiği oluşturur.

Bağımsız Değişkenler:

Bağımsız değişken Açıklama
<FROM> Geçiş başlatılıyor. Geçişler ada veya kimlikle tanımlanabilir. 0 sayısı, ilk geçiş öncesinde anlamına gelen özel bir durumdur. Varsayılan değer 0'dır.
<TO> Son geçiş. Varsayılan olarak son geçişi kullanır.

Seçenekler:

Seçenek Kısa Açıklama
--output <FILE> -o Betiği yazacak dosya.
--idempotent -i Herhangi bir geçişte veritabanında kullanılabilecek bir betik oluşturun.
--no-transactions SQL işlem deyimleri oluşturmayın.

Yaygın seçenekler yukarıda listelenmiştir.

Aşağıdaki örnek InitialCreate geçişi için bir betik oluşturur:

dotnet ef migrations script 0 InitialCreate

Aşağıdaki örnek, InitialCreate geçişi sonrasında tüm geçişler için bir betik oluşturur.

dotnet ef migrations script 20180904195021_InitialCreate

Ek kaynaklar