2. Bölüm .Net Core ile Kurumsal Mimari – Mapping ve DBContext Konfigrasyonu

Bir önceki bölümde projenin katmanlarını oluşturduk İncelemek için tıklayınız.
2. Bölümde konumuz mapping ve DBContext konfigrasyonu. Fluent Api ‘den de faydalanacağız bu kısımda.
Core katmanına öncelikle EntityConfigratonMapper.cs adında class oluşturalım.

namespace MuratGOZCU.Core
{
    public abstract partial class EntityConfigratonMapper<T> : IEntityTypeConfiguration<T> where T : class
    {
        public abstract void Configure(EntityTypeBuilder<T> builder);
    }
}

Neden Fluent Desing Pattern ?
Martin Fowler‘ın yayınladığı bir manifestodur. Amacı daha okunabilir ve geliştirilebilir architecture projeler oluşturmak. Aslında projelerimizde kullandığımız ve ismini bilmediğimiz bir pattern diyebiliriz 🙂
Başka bir yazıda fluent design pattern konusunu daha detaylı incelemek üzere serimiz çok uzun olacak konuyu çok da uzatmayalım.

Fluent Desingn Pattern için ilgili kaynaklar;
martinfowler.com
dotnettutorials.net

Data katmanına Mapping klasörü oluşturup içerisine CategoryMap.cs oluşturuyoruz.

namespace MuratGOZCU.Data.Mapping
{
    public class CategoryMap : EntityConfigratonMapper<Category>
    {
        public override void Configure(EntityTypeBuilder<Category> builder)
        {
            builder.HasKey(m => m.Id);
            builder.Property(m => m.Name).HasMaxLength(250);
            builder.Property(m => m.Description).HasMaxLength(255);
        }
    }
}

EFDbContext.cs class’ımızı yazalım ve reflection ‘ın güzelliklerinden faydalanarak Entity classlarını yani, Category classımızı ve diğer mapping yapacağımız bütün tabloları database’e migration yapmak üzere hazırlayalım. Generic bir method yazıp EntityConfigratonMapper referansını içeren entity classlarının DBSet<> işlemlerini yapmış olduk.

namespace MuratGOZCU.Data
{
    public class EFDbContext : DbContext
    {

        public EFDbContext(DbContextOptions&lt;EFDbContext> options)
            : base(options)
        {
        }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
            var typesToRegister = Assembly.GetExecutingAssembly().GetTypes()
                .Where(type => !String.IsNullOrEmpty(type.Namespace))
                .Where(type => type.BaseType != null &amp;&amp; type.BaseType.IsGenericType &amp;&amp;
                               type.BaseType.GetGenericTypeDefinition() == typeof(MuratGOZCU.Core.EntityConfigratonMapper&lt;>));
            foreach (var type in typesToRegister)
            {
                dynamic configInstance = Activator.CreateInstance(type);
                modelBuilder.ApplyConfiguration(configInstance);
            }
        }
        
    }
}

appsettings.json dosyasına bir bağlantı dizesi ekleyeceğiz, böylece veritabanıyla etkileşime girebilelim.

"ConnectionStrings": {
  "DefaultConnection": "Server=.;Database=GenericRepository;Trusted_Connection=True;MultipleActiveResultSets=true"
},

Startup.cs Konfigrasyonu


namespace MuratGOZCU.Web
{
    public class Startup
    {
        public IConfigurationRoot Configuration { get; }

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddDbContext&lt;EFDbContext>(options =>
                options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

            services.AddMvc();
        }

        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

           
        }
    }
}

“2. Bölüm .Net Core ile Kurumsal Mimari – Mapping ve DBContext Konfigrasyonu” üzerine 2 yorum

Bir cevap yazın

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