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.
Başka bir yazıda fluent design pattern konusunu daha detaylı incelemek üzere serimiz çok uzun olacak konuyu çok da uzatmayalım.

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 ile göndereceğiz. Aşağıda generic bir method yazıp EntityConfigratonMapper referansını içeren bütün classları otomatik olarak anlayıp işlemleri gerçekleştirecektir.

namespace MuratGOZCU.Data
{
    public class EFDbContext : DbContext
    {

        public EFDbContext(DbContextOptions<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 && type.BaseType.IsGenericType &&
                               type.BaseType.GetGenericTypeDefinition() == typeof(MuratGOZCU.Core.EntityConfigratonMapper<>));
            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<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