Derinlemesine yazılım eğitimleri için kanalımı takip edebilirsiniz...

.NET Core Class Library’de Database First Yaklaşımı İle Mevcut Veritabanında Çalışma

Merhaba,

Bir önceki Asp.NET Core Uygulamalarında Database First Yaklaşımı İle Mevcut Veritabanında Çalışma başlıklı yazımda Asp.NET Core uygulamalarında Database First yaklaşımının nasıl kullanıldığını incelemiştik. Bu içeriğimizde ise yine .NET Core uygulamalarında Class Library içerisinde Database First yaklaşımının kullanımını inceleyeceğiz.

Başlarken

Herşeyden önce ilk olarak bir Solution içerisine Asp.NET Core MVC(WebApplication) uygulamasıyla birlikte .NET Core Class Library(DAL) projesi oluşturarak hali hazırda içeriğimize başlayabiliriz.
.NET Core Class Library'de Database First Yaklaşımı İle Mevcut Veritabanında Çalışma

Kurulum

Class Library projesinde(DAL) Entitiy Framework Core – Database First yaklaşımını uygulayabilmek için;

paketlerini projemize yüklememiz gerekmektedir.
Bunun için aşağıdaki komutları tek tek Package Manager Console penceresinden çalıştırmanız yeterli olacaktır.

Install-Package Microsoft.EntityFrameworkCore.SqlServer
Install-Package Microsoft.EntityFrameworkCore.Tools
Install-Package Microsoft.EntityFrameworkCore.SqlServer.Design

İlk Girişim ve Olası Hatalardan Arındırma

İlgili paketleri projemize yükledikten sonra yapmamız gereken, ilk paragrafta referans olarak verilen adrestede belirtildiği üzere projeye(Class Library – DAL) Database First yaklaşımıyla mevcut veritabanını aşağıdaki direktif aracılığıyla yüklemeye çalışmaktır.

Scaffold-DbContext "Server=.;Database=Northwind;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models
  • Olası Hata ve Çözümü
    Yukarıda verilen komutla veritabanını projeye çekmeye çalıştığınız zaman;

    Could not load assembly ‘DAL’. Ensure it is referenced by the startup project ‘WebApplication’.

    hatasıyla karşılaşabilirsiniz.
    İlgili hatanın görseli aşağıdaki gibidir;
    .NET Core Class Library'de Database First Yaklaşımı İle Mevcut Veritabanında Çalışma

    Bu hatayı çözebilmek için yapmanız gereken işlemler; Class Library projesine(DAL) yüklenen paketlerin Asp.NET Core web uygulamasınada (WebApplication) yüklenmesiyle birlikte Class Library(DAL) projesinin .dll’ini web uygulamasına referans etmektir.
    .NET Core Class Library'de Database First Yaklaşımı İle Mevcut Veritabanında Çalışma

    Bu işlemlerden sonra ilgili direktifi yeniden çalıştırdığımızda aşağıdaki ekran görüntüsünde olduğu gibi ilgili veritabanı Database First yöntemiyle projeye transfer edilmiş olacaktır.
    .NET Core Class Library'de Database First Yaklaşımı İle Mevcut Veritabanında Çalışma

  • Artık veritabanımız Class Library projesinde (DAL) hali hazırda beklemektedir. İlgili context nesnesini web uygulamasına aşağıdaki gibi Dependency Injection ile register edip kullanmamız yeterli olacaktır.

        public class Startup
        {
            public void ConfigureServices(IServiceCollection services)
            {
                services.AddDbContext<NorthwindContext>(_ => _.UseSqlServer("Server=.;Database=Northwind;Trusted_Connection=True;"));
                services.AddMvc();
            }
    
            public void Configure(IApplicationBuilder app, IHostingEnvironment env)
            {
                if (env.IsDevelopment())
                    app.UseDeveloperExceptionPage();
                app.UseMvc(_ => _.MapRoute("Default", "{controller=Home}/{action=Index}/{id?}"));
            }
        }
    

    Projeyi derleyip çalıştırdığımızda aşağıdaki ekran görüntüsünde de olduğu gibi veritabanına erişim başarıyla sağlanmakta ve verilerimiz elde edilmektedir.
    .NET Core Class Library'de Database First Yaklaşımı İle Mevcut Veritabanında Çalışma

Bu noktadan itibaren, her iki makale aracılığıyla Entity Framework Core mimarisinin Database First yapılanmasıyla nasıl kullanıldığına dair olası tüm soruların cevaplarını verebildiğimize ve siz değerli okuyucularımın meraklarını dindirdiğimize inanmaktayım.

İlgilenenlerin faydalanması dileğiyle…

Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar…

Bunlar da hoşunuza gidebilir...

3 Cevaplar

  1. Mahir dedi ki:

    .net core db first yaklasimi ile stored procedure , functions , trigger gibi seylerimizi nasil getirip kullanabiliriz?

    • Gençay dedi ki:

      Merhaba,

      Entity Framework Core üzerinden Stored Procedure nasıl oluşturulur? sorusunun cevabını vereceğim. Functionlar için buradan aldıklarınızı genelleyiniz.

      • Adım 1
        Boş bir migration oluşturunuz ve içerisine Stored Procedure’u aşağıdaki gibi yerleştiriniz.

            public partial class mig_3 : Migration
            {
                protected override void Up(MigrationBuilder migrationBuilder)
                {
                    string storedprocedure = @"
                                                CREATE PROC sp_Personeller
                                                (
        	                                        @key NVARCHAR(5)
                                                )AS
                                                BEGIN
        	                                        SELECT * FROM Personeller WHERE Adi LIKE '%' + @key + '%'
                                                END
                                            ";
                    migrationBuilder.Sql(storedprocedure);
                }
        
                protected override void Down(MigrationBuilder migrationBuilder)
                {
        
                }
            }
        

        14. satırda olduğu gibi yazılan Stored Procedure kodlarını migrationBuilder.Sql diyerek çalıştırınız. Ayriyetten bu komutun Stored Procedure dışında tüm sql komutları çalıştırdığına dikkatinizi çekerim.

      • Adım 2
        Bu migration’ı migrate ediniz.

        dotnet ef database update
        
      • Adım 3
        FromSqlRaw fonksiyonu ile ilgili Stored Procedure çağrılır ve kullanılır.

            public class PersonelController : Controller
            {
                readonly PersonelContext _personelContext;
                public PersonelController(PersonelContext personelContext)
                {
                    _personelContext = personelContext;
                }
                public IActionResult Get(string text)
                {
                    var personeller = _personelContext.Personeller.FromSqlRaw($"sp_Personeller", "'{text}'").ToList();
                    return View();
                }
            }
        

        Parametreli Stored Procedure’lara SqlParameter nesnesi üzerinden de aşağıdaki gibi parametre değeri gönderilebilir.

                public IActionResult Get(string text)
                {
                    var param = new SqlParameter("@text", text);
                    var personeller = _personelContext.Personeller.FromSqlRaw($"sp_Personeller @text", param).ToList();
                    return View();
                }
        

      Ek olarak;
      Ham sorguları direkt olarak çalıştırmak istiyorsanız ‘ExecuteSqlCommand’ metodunu kullanabilirsiniz.

              public IActionResult Create()
              {
                  _personelContext.Database.ExecuteSqlCommand("INSERT Personeller(Adi, Soyadi) VALUES('Rıfkı', 'Güngörmezoğulları')");
                  return View();
              }
      

      Kolay gelsin.

  2. Doğukan dedi ki:

    Merhaba hocam , nasıl çözebilirim
    Error Number:4060,State:1,Class:11
    Cannot open database “Northwind” requested by the login. The login failed.
    Login failed for user ‘DESKTOP-7S1L2OC\efsan’.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir