Aracılığıyla paylaş


Entity Framework Core araçları kılavuzu - .NET 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, veritabanı geçişleri oluşturur, bu geçişleri uygular ve mevcut bir veritabanını temel alan bir model için kod üretir. Komutlar, .NET SDK'sının bir parçası olan platformlar arası dotnet komutunun uzantısıdır. Bu araçlar .NET projeleriyle çalışır.

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

  • 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 projede araçları kullanabilmeniz için önce projeye Microsoft.EntityFrameworkCore.Design paketini eklemeniz 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

Küresel araçları en son kullanılabilir sürüme güncellemek için dotnet tool update --global dotnet-ef kullanın. Projenizde yerel olarak yüklü araçlar varsa kullanın dotnet tool update dotnet-ef. Belirli bir sürümü yüklemek için --version <VERSION>'yi komutun sonuna ekleyin. 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.

  • Araçların inşa ettiği ve çalıştırdığı başlangıç projesidir. 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 sınıf kitaplığındadır.
  • Bir .NET 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 projeleri ve .NET Framework projeleriyle çalışır. .NET Standart sınıf kitaplığında EF Core modeline sahip uygulamaların .NET veya .NET Framework projesi olmayabilir. Örneğin bu, Xamarin ve Evrensel Windows Platformu uygulamaları için geçerlidir. Böyle durumlarda, tek amacı araçlar için başlangıç projesi olarak hareket etmek olan bir .NET 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.

Important

Xamarin.Android, Xamarin.iOS, Xamarin.Mac artık android için .NET, iOS için .NET ve macOS için .NET olarak doğrudan .NET ile tümleştirilmiş (.NET 6'dan başlayarak). Bugün bu proje türleriyle derleme yapıyorsanız, destek almaya devam etmek için .NET SDK stili projelere yükseltmeniz önerilir. Xamarin projelerini .NET'e yükseltme hakkında daha fazla bilgi için Xamarin'den .NET'e yükseltme & .NET MAUI belgelerine bakın.

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 çalışma zamanını kullanmaları gerekir. EF Core modeli .NET 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 doğrudan bir .NET uygulaması değildir; .NET uygulamalarının desteklemesi gereken bir API kümesinin 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 varsa ek bağımsız değişkenler, Program.CreateHostBuilder'a iletilir.

dotnet ef database update -- --environment Production

Tip

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

Ortak seçenekler

Option Short Description
--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 projeye ait 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 Çıkışa düzey belirteci ekle.

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

dotnet ef database drop

Veritabanını siler.

Options:

Option Short Description
--force -f Bunu onaylama.
--dry-run Hangi veritabanının silineceğini göster, ancak silme.
--connection <CONNECTION> Veritabanına bağlantı dizesi. AddDbContext veya OnConfiguring içinde belirtilen değere varsayılan olarak ayarlanır. EF Core 11'e eklendi.

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.

Arguments:

Argument Description
<MIGRATION> Hedef geçiş. Geçişler ada veya kimlik numarasıyla 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.

Options:

Option Description
--connection <CONNECTION> Veritabanına bağlantı dizesi. Varsayılan olarak, AddDbContext veya OnConfiguring içinde belirtilen seçeneği 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

DbContext tarafından kullanılan modelin derlenmiş bir versiyonunu oluşturur ve sorguları önceden derler.

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

Options:

Option Short Description
--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

Note

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 adına sahip bağlam için modeli optimize eder ve onu ayrı bir klasör ve isim uzayı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.

Arguments:

Argument Description
<CONNECTION> Veritabanına bağlantı dizesi. ASP.NET Core 2.x projeleri için, değer name=<bağlantı dizesinin adı> 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.

Options:

Option Short Description
--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> Yerleştirmek üzere sınıf dosyasının konulacağı DbContext dizini. 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 -t veya --table öğesini yineleyin. 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ıfında OnConfiguring yönteminin oluşturulmasını bastırır.
--no-pluralize Çoğullaştırıcıyı kullanmayın.

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;Integrated Security=true;" Microsoft.EntityFrameworkCore.SqlServer --no-onconfiguring

dotnet ef dbcontext script

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

Options:

Option Short Description
--output <FILE> -o Sonucu yazacak dosya.

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

dotnet ef migrations add

Yeni bir geçiş ekler.

Arguments:

Argument Description
<NAME> Geçişin adı.

Options:

Option Short Description
--output-dir <PATH> -o Dosyaların çıktısı için kullanılan dizin. Yollar hedef proje dizinine göredir. Varsayılan olarak "Migrations" 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.

Options:

Option Short Description
--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

Note

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.

Options:

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

dotnet ef migrations list

Kullanılabilir geçişleri listeler.

Options:

Option Description
--connection <CONNECTION> Veritabanına bağlantı dizesi. AddDbContext veya OnConfiguring içinde belirtilen varsayılan değerdir.
--no-connect Veritabanına bağlanmayın.

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.

Options:

Option Short Description
--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. Veritabanına bağlanırken bir hata oluşursa yalnızca kod değişikliklerini geri alır.
--connection <CONNECTION> Veritabanına bağlantı dizesi. Varsayılan olarak, AddDbContext veya OnConfiguring içinde belirtilen seçeneği kullanır. EF Core 11'e eklendi.
--offline Veritabanına bağlanmadan geçişi kaldırın. EF Core 11'e eklendi.

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

Note

--offline ve --force seçenekleri, --force'nin geri döndürülmeden önce geçişin uygulanıp uygulanmadığını denetlemek için bir veritabanı bağlantısı gerektirdiğinden birlikte kullanılamaz.

dotnet ef migrations script

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

Arguments:

Argument Description
<FROM> Geçiş başlatılıyor. Geçişler ada veya kimlik numarasıyla 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.

Options:

Option Short Description
--output <FILE> -o Yazılacak betik için dosya.
--idempotent -i Her türlü 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