Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Araçlar tarafından kullanılan hizmetlerin bazıları yalnızca tasarım aşamasında kullanılır. Bu hizmetler, uygulamanızla dağıtılmalarını önlemek için EF Core'un çalışma zamanı hizmetlerinden ayrı olarak yönetilir. Bu hizmetlerden birini (örneğin, geçiş dosyalarının oluşturulacağı hizmet) geçersiz kılmak için başlangıç projenize uygulamasını IDesignTimeServices ekleyin.
internal class MyDesignTimeServices : IDesignTimeServices
{
public void ConfigureDesignTimeServices(IServiceCollection services)
=> services.AddSingleton<IMigrationsCodeGenerator, MyMigrationsCodeGenerator>();
}
Microsoft.EntityFrameworkCore.Design'e Başvuru Yapma
Microsoft.EntityFrameworkCore.Design bir DevelopmentDependency paketidir. Bu, bağımlılığın diğer projelere geçişli olarak akmayacağı ve varsayılan olarak türlerine başvuramayacağınız anlamına gelir.
Türlerine başvurmak ve tasarım zamanı hizmetlerini geçersiz kılmak için PackageReference öğesinin meta verilerini proje dosyanızda güncelleştirin.
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="9.0.0">
<PrivateAssets>all</PrivateAssets>
<!-- Remove IncludeAssets to allow compiling against the assembly -->
<!--<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>-->
</PackageReference>
Pakete Microsoft.EntityFrameworkCore.Tools aracılığıyla geçişli olarak başvuruluyorsa, pakete açık bir PackageReference eklemeniz ve meta verilerini değiştirmeniz gerekir.
Hizmetlerin listesi
Aşağıda tasarım zamanı hizmetlerinin listesi yer alır.
| Hizmet | Description |
|---|---|
| IAnnotationCodeGenerator | İlgili model anotasyonları için kodu oluşturur. |
| ICSharpHelper | C# kodu oluşturmaya yardımcı olur. |
| IPluralizer | Sözcükleri çoğullaştırır ve tekilleştirir. |
| ICSharpMigrationOperationGenerator | Geçiş işlemleri için C# kodu oluşturur. |
| ICSharpSnapshotGenerator | Model anlık görüntüleri için C# kodu oluşturur. |
| IMigrationsCodeGenerator | Geçiş için kod oluşturur. |
| IMigrationsCodeGeneratorSelector | Uygun geçiş kodu oluşturucuyu seçer. |
| IMigrationsScaffolder | Geçiş dosyalarını yönetmek için ana sınıf. |
| ICompiledModelCodeGenerator | Derlenmiş model meta verileri için kod oluşturur. |
| ICompiledModelCodeGeneratorSelector | Uygun derlenmiş model kod oluşturucuyu seçer. |
| ICompiledModelScaffolder | Derlenmiş modeller için yapı iskelesi ana sınıfı. |
| IDatabaseModelFactory | Veritabanından veritabanı modeli oluşturur. |
| IModelCodeGenerator | Bir model için kod oluşturur. |
| IModelCodeGeneratorSelector | Uygun model kod oluşturucuyu seçer. |
| IProviderConfigurationCodeGenerator | OnConfiguring kodu oluşturur. |
| IReverseEngineerScaffolder | Ters mühendislik uygulanmış modellerin iskelesi için ana sınıf. |
| IScaffoldingModelFactory | Veritabanı modelinden model oluşturur. |
| IPrecompiledQueryCodeGenerator | Önceden derlenmiş sorgular için kod oluşturur. |
| IPrecompiledQueryCodeGeneratorSelector | Uygun önceden derlenmiş sorgu kodu oluşturucusunu seçer. |
Hizmetleri kullanma
Bu hizmetler kendi araçlarınızı oluşturmak için de yararlı olabilir. Örneğin, tasarım zamanı iş akışınızın bir bölümünü otomatikleştirmek istediğinizde.
AddEntityFrameworkDesignTimeServices ve AddDbContextDesignTimeServices uzantı yöntemlerini kullanarak bu hizmetleri içeren bir hizmet sağlayıcısı oluşturabilirsiniz.
using var db = new MyDbContext();
// Create design-time services
var serviceCollection = new ServiceCollection();
serviceCollection.AddDbContextDesignTimeServices(db);
var provider = db.GetService<IDatabaseProvider>().Name;
var providerAssembly = Assembly.Load(new AssemblyName(provider));
var providerServicesAttribute = providerAssembly.GetCustomAttribute<DesignTimeProviderServicesAttribute>();
var designTimeServicesType = providerAssembly.GetType(providerServicesAttribute.TypeName, throwOnError: true);
((IDesignTimeServices)Activator.CreateInstance(designTimeServicesType)!).ConfigureDesignTimeServices(serviceCollection);
serviceCollection.AddEntityFrameworkDesignTimeServices();
var serviceProvider = serviceCollection.BuildServiceProvider();
// Add a migration
var migrationsScaffolder = serviceProvider.GetRequiredService<IMigrationsScaffolder>();
var migration = migrationsScaffolder.ScaffoldMigration(migrationName, rootNamespace);
migrationsScaffolder.Save(projectDir, migration, outputDir);