c# - واحد - قاعدة بيانات مستشفى بالانجليزي




إنشاء قاعدة بيانات تلقائية في Entity Framework Core (4)

سوف يستخدم طلبي الذي يتم نقله إلى. NET core EF Core الجديد مع SQLite. أريد إنشاء هياكل قاعدة البيانات والجدول تلقائيًا عند تشغيل التطبيق لأول مرة. وفقا للوثائق الأساسية EF يتم ذلك باستخدام الأوامر اليدوية

dotnet ef migrations add MyFirstMigration

dotnet ef database update

ومع ذلك ، لا أريد أن يقوم المستخدم النهائي بإدخال هذه الأوامر وأفضّل أن يقوم التطبيق بإنشاء وإعداد قاعدة البيانات للاستخدام الأول. ل EF 6 هناك وظيفة مثل

Database.SetInitializer(new CreateDatabaseIfNotExists<MyContext>());

ولكن في EF Core لا يبدو أن هذه موجودة. لا يمكنني العثور على أي أمثلة أو مستندات حول شيء مكافئ لـ EF core ولم يتم ذكره في قائمة الميزات المفقودة في الوثائق الأساسية EF. لدي إعداد فئات النماذج بالفعل حتى أتمكن من كتابة بعض التعليمات البرمجية لتهيئة قاعدة البيانات استنادًا إلى الطرز ، ولكن سيكون من السهل جدًا أن يقوم الإطار بذلك تلقائيًا. لا أرغب في إنشاء النموذج تلقائيًا أو الترحيل ، فقط قم بإنشاء هياكل الجدول في قاعدة بيانات جديدة.

هل أفتقد شيئًا ما هنا أم أنها وظيفة إنشاء جدول تلقائيًا مفقودة في EF core؟


إجابتي تشبه إلى حد بعيد إجابة ريكاردو ، لكنني أشعر أن مقاربي أكثر وضوحًا قليلاً لأنه ببساطة يحدث كثيرًا في وظيفته using حتى أنني لست متأكدًا من كيفية عملها بالضبط في المستوى الأدنى.

لذلك بالنسبة لأولئك الذين يريدون حلاً بسيطًا ونظيفًا ينشئ قاعدة بيانات لك حيث تعرف بالضبط ما يحدث تحت الغطاء ، فهذا لك:

public Startup(IHostingEnvironment env)
{
    using (var client = new TargetsContext())
    {
        client.Database.EnsureCreated();
    }
}

هذا يعني إلى حد كبير أنه ضمن DbContext الذي قمت بإنشائه (في هذه الحالة ، يسمى TargetsContext ) ، يمكنك استخدام مثيل DbContext لضمان إنشاء الجداول المحددة في الفصل الدراسي عند تشغيل Startup.cs في تطبيق.


إذا حصلت على السياق من خلال قائمة معلمات التكوين في Startup.cs ، يمكنك القيام بذلك بدلاً من ذلك:

public void Configure(IApplicationBuilder app, IHostingEnvironment env,  LoggerFactory loggerFactory,
    ApplicationDbContext context)
 {
      context.Database.Migrate();
      ...

إذا لم تقم بإنشاء عمليات ترحيل ، فهناك خياران

1. إنشاء قاعدة البيانات والجداول من التطبيق الرئيسي:

var context = services.GetRequiredService<YourRepository>();
context.Database.EnsureCreated();

2. قم بإنشاء الجداول إذا كانت قاعدة البيانات موجودة بالفعل:

var context = services.GetRequiredService<YourRepository>();
context.Database.EnsureCreated();
RelationalDatabaseCreator databaseCreator =
(RelationalDatabaseCreator)context.Database.GetService<IDatabaseCreator>();
databaseCreator.CreateTables();

بفضل answer Bubi


بالنسبة لـ EF Core 2.0+ ، كان عليّ اتباع نهج مختلف لأنهم غيروا واجهة برمجة التطبيقات. اعتبارًا من مارس 2019 ، توصي Microsoft بوضع رمز ترحيل قاعدة البيانات في فئة إدخال التطبيق الخاص بك ولكن خارج رمز بناء WebHost.

public class Program
{
    public static void Main(string[] args)
    {
        var host = CreateWebHostBuilder(args).Build();
        using (var serviceScope = host.Services.CreateScope())
        {
            var context = serviceScope.ServiceProvider.GetRequiredService<PersonContext>();
            context.Database.Migrate();
        }
        host.Run();
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>();
}




.net-core