Murat GÖZCÜ http://www.muratgozcu.com Thu, 12 Mar 2020 07:41:40 +0000 tr hourly 1 https://wordpress.org/?v=5.1.1 Jenkins’den selamlar! http://www.muratgozcu.com/?p=233 http://www.muratgozcu.com/?p=233#respond Fri, 21 Feb 2020 11:07:54 +0000 http://www.muratgozcu.com/?p=233 Okumaya devam et Jenkins’den selamlar!]]> Jenkins, Continuous Integration araçlarının en popüleri ve
DevOps‘un en önemli aşamasıdır diyebiliriz. Bu popülerliğe makaleyi okuduktan sonra, siz de hak vereceksiniz.

Jenkins Nedir?

Jenkins Continuous Integration – CI (Sürekli Entegrasyon) için yazılmış açık kaynak kodlu bir otomatik entegrasyon aracıdır. Java dili ile geliştirilmiştir.

  • Geliştiricilerin değişikliklerini kolayca entegre edebilmesi.
  • Commit edilen projeyi otomatik olarak derlemesi.
  • Testlerin otomatik olarak çalıştırması.
  • Kod ile ilgili veya testlere uymayan bir kod hatası alınırsa size bilgi verebilmesi ve mail atabilmesi.
  • Yazılım teslim sürecini hızlandırması.
  • Yazılımın kod kalitesini görüntüleyebilmesi.
  • Büyük topluluk desteğine sahip açık kaynak kodlu olması.
  • Çalışmanızı kolaylaştırmak çalışan geliştirici topluluğuna ve 1000’den fazla eklentiye sahip olması.

Sürekli Teslimat (Continuous Integration– CI) Kodun her an kurulumunun yapılabilir halde olmasını sağlamak diye tarif edebiliriz.

Kavramlar

Node : Jenkins sunucusunun üzerinde çalıştığı makineyi ifade eder.

Pipeline : İşlerin ardışık bir sıra ile yapılabilmesini sağlar.

Stage : Pipeline içerisindeki her fazı ifade eder.
Örneğin : build > Test > deploy

Step : Stage içerisindeki adımlar

]]>
http://www.muratgozcu.com/?feed=rss2&p=233 0
.Net Core 3.0 System.Text.Json Nedir ? Nasıl Kullanılır ? http://www.muratgozcu.com/?p=218 http://www.muratgozcu.com/?p=218#respond Fri, 11 Oct 2019 14:47:43 +0000 http://www.muratgozcu.com/?p=218 Okumaya devam et .Net Core 3.0 System.Text.Json Nedir ? Nasıl Kullanılır ?]]> Yaklaşık bir yıldır preview sürümü yayınlanmakta olan .Net Core 3.0 ‘ı release veryisonu 2019-09-23 tarihinde yayınlandı. Bu linkteki makalede genel olarak 3.o’ın getireceği yenilikler hakkında bilgi paylaştım. Bu makalede ise .Net Core 3.0’ın getirdiği yeniliklerden biri olan System.Text.Json ‘ı detaylı bir şekilde inceledik.

“Ah Newtonsoft, vah Newtonsoft, by by Newtonsoft”

JSON Nedir ?

JSON (JavaScript Object Notation) veri depolamak ve taşımak için çevik bir formattır. Bütün diller tarafından desteklenmektedir.

NewtonJson ve System.Text.Json

]]>
http://www.muratgozcu.com/?feed=rss2&p=218 0
Asp.Net Core Redis Kullanımı | Redis Nedir ? http://www.muratgozcu.com/?p=187 http://www.muratgozcu.com/?p=187#comments Thu, 19 Sep 2019 11:45:21 +0000 http://www.muratgozcu.com/?p=187 Okumaya devam et Asp.Net Core Redis Kullanımı | Redis Nedir ?]]>

Redis NoSQL memory cached veritabanı sistemlerinden biridir.
Redis ilk başlarda Linux için yazılmış bir memory cached sistemi olsada Windows işletim sistelerini destekleyecek şekilde güncellenmiştir.

Avantajları

  • Senkron çalıştığı için son derece hızlıdır.
  • Birçok veri türünü destekler.
  • Veriyi hem RAM üzerine hem de ayarladığınız konfigürasyona göre disk üzerine kaydedebilir.
  • Disk üzerine kayıt yaptığı için restart sonrasında aynı verilerle çalışmaya devam eder.
  • Son derece aktif bir kullanıcı kitlesine sahiptir.
  • Sharding, cluster, sentinel,replication gibi birçok enterprise özelliklere sahiptir

Dezavantajları

  • Veri boyutunuza göre RAM’e ihtiyacınız olur.
  • Komplex sorgular için sorgu yapacaksanız, Redis yapısını düzgün kurgulamalısınız.
  • Bir transaction hata alırsa geri dönüşü yoktur.

Redis Kurulumunu bu linkten indirebilirsiniz.
redis-server.exe tıklayıp kurulumu yapın. aşağıdaki ekran geldiği zaman kurulum tamamlanmıştır.

Evet şimdi redis-cli.exe çalıştırıp test edelim.

Projemize Redis ve Newtonsoft’u ekleyelim.

<PackageReference Include="Microsoft.Extensions.Caching.Redis" Version="2.2.0" />
<PackageReference Include="Newtonsoft.Json" Version="12.0.2" />

Startup.cs

public void ConfigureServices(IServiceCollection services)
{
    services.AddDistributedRedisCache(option =>
    {
        option.Configuration = "localhost:6379";
    });
}

Values.Controller.cs Return String

[HttpGet]
public async Task&lt;string> Get()
{
    const string cacheKey = "datetimeCacheKey";

    var cachedItem = await _distributedCache.GetStringAsync(cacheKey);
    if (!string.IsNullOrEmpty(cachedItem))
    {
        return cachedItem;
    }
    else
    {
        string str = DateTime.Now.ToString();
        await _distributedCache.SetStringAsync(cacheKey, str);
        return str;
    }
}

Values.Controller.cs Return Object

[HttpGet]
public async Task &lt;string> Get()
{
    const string cacheKey = "objectCacheKey";
    var cachedItem = await _distributedCache.GetStringAsync(cacheKey);
    if (!string.IsNullOrEmpty(cachedItem))
    {
        return cachedItem;
    }
    else
    {
        List&lt;UserModel> userModel = new List&lt;UserModel>();
        var model = new UserModel()
        {
            Id = 1,
            Email = "murat.gozcu@flo.com.tr",
            Name = "Murat GÖZCÜ"
        };
        userModel.Add(model);
        var jsonData = JsonConvert.SerializeObject(model);
        await _distributedCache.SetStringAsync(cacheKey, jsonData);
        return jsonData;
    }
}

Örnek projeyi buradan indirebilirsiniz.

]]>
http://www.muratgozcu.com/?feed=rss2&p=187 1
.Net Core Swagger Kullanımı http://www.muratgozcu.com/?p=174 http://www.muratgozcu.com/?p=174#respond Wed, 04 Sep 2019 06:16:41 +0000 http://www.muratgozcu.com/?p=174 Okumaya devam et .Net Core Swagger Kullanımı]]> Swagger Nedir ?

Swagger, yazılım geliştiricilerin RESTful Web servislerini kolayca çalıştırılıp kullanılmasına olanak sağlayan açık kaynaklı bir araçtır.

Swagger Nasıl Kullanılır ?

Swagger ile ilgili kurulum ve kullanımı hakkında kısa bilgi vereceğim sonrasında bir kaç örnek ile detaylandıracağım.

NuGet Paketleri ile kurulum

Paket Manager Console
Install-Package Swashbuckle -Pre

Project.json dosyası ile kurulum
“Swashbuckle”: “6.0.0-beta902”

Middleware yapılandırması

public void ConfigureServices(IServiceCollection services)
  {
      //Framework servislerini ekleyiniz.
      services.AddMvc();
      //Loglama servislerini ekleyiniz.
      services.AddLogging();

      // Add our repository type
      services.AddSingleton&lt;IEFRepository,EFRepository>();

    //Servislere swaggeri ekleyiniz. Kullanmka istediginizde ISwaggerProvider servisini inject ederek kullanınız. 
  services.AddSwaggerGen(options =>
            {
                options.SwaggerDoc("v1", new Info { Title = "Baslık", Version = "v1" });
            });
  }

 
  public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
  {
            app.UseSwagger();
            app.UseSwaggerUI(c =>
            {
                c.SwaggerEndpoint("/swagger/v1/swagger.json", " Servis baslık");
            });
          

  }

Örneklere başlamadan önce karşılaştığım bir hata hakkında bilgi vermek istiyorum. Projenizde area(admin) alanı var ise orada API değilde normal kontroller kullanıyorsanız swagger oluşturulurken şema hatası verecektir.Bu hatanını çözümünü o kontrolleri ignore ederek çözebilirsiniz. Yapmanız gereken aşağıdaki kod satırınız kontroller sayfanızın başına ekleyiniz.

[ApiExplorerSettings(IgnoreApi = true)]

Swagger Örnek Kullanımı

Middleware yapılandırılmasından sonra bir tane örnek yapacağım.Web API ile bir tablodaki verileri listeleme ve parametre ile getbyId methodlarını kullanacagım.Örnek kod bloğu aşağıdadır.

[Route("api/[controller]")]
    [ApiController]
    public class SwaggerController : Controller
    {

        private readonly IAppLoggerService _appLoggerService;
        public SwaggerController(IAppLoggerService appLoggerService)
        {
            _appLoggerService = appLoggerService;
        }
        [HttpGet("[action]")]
        public IList&lt;AppLogger> GellAllLogs() {
            return _appLoggerService.GetAll();
        }
        [HttpGet("[action]")]
        public  AppLogger  GetById(int Id)
        {
            return _appLoggerService.GetById(Id);
        }

    }
]]>
http://www.muratgozcu.com/?feed=rss2&p=174 0
.Net Core ile JWT Token Kullanımı ve JWT Token Nedir? http://www.muratgozcu.com/?p=66 http://www.muratgozcu.com/?p=66#comments Thu, 18 Jul 2019 07:57:03 +0000 http://www.muratgozcu.com/?p=66 Okumaya devam et .Net Core ile JWT Token Kullanımı ve JWT Token Nedir?]]> JWT (JSON Web Tokens). WebApi ile mobil, IOT veya single page web projelerinde kullanıcı doğrulama, kullanıcı tanıma, veri bütünlüğünü ve bilgi güvenliğini koruma gibi noktalarda kullanılmakta.

Neden JWT ?

  • JSON kullanması
  • URL üzerinde taşınabilmesi
  • Web çerezleri kullanma zorunluluğu olmaması
  • CSRF ataklarına karşı daha kapalı olması
  • Hızlı doğrulama yapılabilmesi
  • Kolay ölçeklenebilir olması
  • Web uygulamaları açısından HTTP session gerekmemesi, stateless kullanıma uygun olması
  • Veri bütünlüğünü sağlaması

JWT Neden Güvenli ?

  • JWT, Base64 olarak şifrelenir
  • HASH256 kripto algoritması kullanılır
  • 3 Bölümden Oluşur

Header: bölümünde; hangi token türünün ve şifreleme algoritmasının kullanıldığı bilgisi yer alır.

Payload; uygulama bazlı bilgilerin yer aldığı(claim,userId vs.) yani uygulamaya özel bölümdür.

Signature ise adından da anlaşıldığı gibi server tarafından üretilen signature’ın bulunduğu bölümdür.

JWT (Json web token) projesi oluşturalım

 dotnet new webapi -o JwtExample 

console ekranına code . yazarak projeyi açalım

Startup.cs Ayarları


public void ConfigureServices(IServiceCollection services)
{
    services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(jwtBearerOptions =>
    {
        jwtBearerOptions.TokenValidationParameters = new TokenValidationParameters()
        {
            ValidateActor = true,
            ValidateAudience = true,
            ValidateLifetime = true,
            ValidateIssuerSigningKey = true,
            ValidIssuer = Configuration["Issuer"],
            ValidAudience = Configuration["Audience"],
            IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["SigningKey"]))
        };
    });
    services.AddMvc();
}



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

TokenController.cs

[AllowAnonymous]
[HttpPost]
[Route("token")]
public IActionResult Post([FromBody]LoginRequest request)
{
    if (ModelState.IsValid)
    {
        var user = _userService.Get(request.UserName, request.Password); 
        if (user == null)
        {
            return Unauthorized();
        }
 
        var claims = new[]
        {
            new Claim(JwtRegisteredClaimNames.Sub, request.Username),
            new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString())
        };
 
        var token = new JwtSecurityToken
        (
            issuer: _configuration["Issuer"], //appsettings.json içerisinde bulunan issuer değeri
            audience: _configuration["Audience"],//appsettings.json içerisinde bulunan audince değeri
            claims: claims,
            expires: DateTime.UtcNow.AddDays(30), // 30 gün geçerli olacak
            notBefore: DateTime.UtcNow,
            signingCredentials: new SigningCredentials(new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration["SigningKey"])),//appsettings.json içerisinde bulunan signingkey değeri
                    SecurityAlgorithms.HmacSha256)
        );
        return Ok(new { token = new JwtSecurityTokenHandler().WriteToken(token) });
    }
    return BadRequest();
}
 
public class LoginRequest
{
    public string UserName {get;set;}
    public string Password {get;set;}
}

ValueContoller.cs

[Authorize]
[Route("api/[controller]")] 
public class ValuesController : Controller
{
    [HttpGet]
    public IEnumerable&lt;string> Get()
    {
        return new string[] { "value1", "value2" };
    }
}
]]>
http://www.muratgozcu.com/?feed=rss2&p=66 2
2. Bölüm .Net Core ile Kurumsal Mimari – Mapping ve DBContext Konfigrasyonu http://www.muratgozcu.com/?p=135 http://www.muratgozcu.com/?p=135#comments Fri, 12 Jul 2019 09:06:24 +0000 http://www.muratgozcu.com/?p=135 Okumaya devam et 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&lt;T> : IEntityTypeConfiguration&lt;T> where T : class
    {
        public abstract void Configure(EntityTypeBuilder&lt;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&lt;Category>
    {
        public override void Configure(EntityTypeBuilder&lt;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();
            }

           
        }
    }
}
]]>
http://www.muratgozcu.com/?feed=rss2&p=135 2
Asp.Net Core Docker’da Nasıl Deploy Edilir http://www.muratgozcu.com/?p=132 http://www.muratgozcu.com/?p=132#respond Fri, 12 Jul 2019 06:26:54 +0000 http://www.muratgozcu.com/?p=132 Okumaya devam et Asp.Net Core Docker’da Nasıl Deploy Edilir]]> Docker containerlerı kullanma amacı sanal veya gerçek sunucu işlemlerine göre daha esnek, taşınabilir ve kolay kopyalama işlemleridir. Diğer bir artısı standart sunucu işlemlerine göre her proje için özel environment’ları kurabiliriz.

Docker container, uygulamanızı ihtiyaca göre farklı makinelerde horizontal bir şekilde çoğaltmanızı oldukça kolaylaştırır. Örneğin, Linux’ta geliştirmeyi tamamladık ve mac makinama gittim ve uygulamanın ordada çalışmasını istiyoruz repoyu klonladım ve “docker-compose-up” yapmam o makinada uygulamayı ve bağımlılıklarını kurup tekrar browserdan kolayca erişebilmeme olanak sağladı, bu oldukça ciddi bir kolaylık.

Container’lar aynı zamanda izolasyonu sağlarlar. Container’larda kullanılan bağımlılıklar ve ayarlar, makinenizde çalışan diğer uygulamaları etkilemez. Bu, dependecny-conflict’lerle karşılaşmamıza engel olur.

Deployment süreçleri docker ile birlikte oldukça hızlı bir hale gelir. Oluşturulan image’ler bir merkezi docker-registry’e atılır ve ihtiyaç duyulduğunda tekrar tekrar rebuild işlemi olmadan registry’den pull edilerek kullanılabilir.

Docker, uygulamaları bir container içerisinde build, deploy ve manage etmeye yarayan open-source olarak geliştirilen bir toolkit dir. Container; hem uygulama kodunu hemde gerekli bağımlılıkları içeren bir yazılım birimi olarak tanımlanabilir ve her bir container birbirinden izole bir şekilde aynı operating system’ı paylaşarak host edilirler. Tek şart bu host operating system Windows yada Linux olsun Docker runtime kurulu olması gerekmektedir.

Bu yazıda en basit haliyle bir asp.net core uygulaması docker kullanarak nasıl host edilir inceleyeceğiz.

1- Installing Docker

İlgili işletim sisteminize göre makinamıza docker kurmamız gerekmekte. Bunun içi aşağıdaki adreslerden faydalanabilirsiniz.

İlgili instruction’ları takip edip kurulum işlemini tamamladıktan sonra docker işletim sisteminiz üzerinde çalışmaya başlayacaktır. Ben windows üzerinde çalıştığımdan docker for windows sürümünü kurdum. Version kontrolü için cmd’de docker –version komutunu çalıştırdığınızda aşağıdaki gibi kurulu olan versiyon bilgisini görüntüleyebilirsiniz. 

]]>
http://www.muratgozcu.com/?feed=rss2&p=132 0
1. Bölüm .Net Core ile Kurumsal Mimari | Proje Adımları http://www.muratgozcu.com/?p=121 http://www.muratgozcu.com/?p=121#respond Wed, 10 Jul 2019 07:48:37 +0000 http://www.muratgozcu.com/?p=121 Okumaya devam et 1. Bölüm .Net Core ile Kurumsal Mimari | Proje Adımları]]> Entity Framework , SOLID ve Generic Repository ‘nin avantajları vardır bu avantajlardan faydalanacağız.

Yazılımcının sırtına çok fazla yük vermemek için tasarlayıcağımız mimaride entity framework ve base işlemler kullanacağız. Ekip veya bireysel olarak hızlı kod ve anlaşılır kod yazma imkanı sunacağız, Oluşturulan projenin senaryosunu göre base metotların içeriği elbette değişebilir.

Projenin mimarisine geçmeden önce başlıkları birlikte inceleyelim.

Kullanılacak Teknolojiler ve Patternler
Fluent Pattern,
AutoMapper,
Entity Framework,
BaseClass,
WebApi,
BaseController,
UnitOfWork Pattern,
Repository ve Generic Repository,
Service ve Generic Service


1.Bölüm : Projenin ve katmanlarının oluşturulması
Solution Projesi açalım ve Libraries ve Presentation adında 2 tane klasör oluşturup içlerine aşağıdaki gibi projenin katmanlarını oluşturalım.

Create a new project – Yeni Proje Oluşturuyoruz

Öncelikle BaseClass oluşturuyoruz ve sonrasında oluşturacağımız DbClasslarımıza inheritance olarak vereceğiz.

namespace MuratGOZCU.Core
{
    public class BaseEntity
    {
        public int Id { get; set; }
    }
}

Core katmanına Domain adında bir klasör açıp içerisine DBClasslarımızı oluşturuyoruz.İlk Classımız Category classını oluşturalım.

namespace MuratGOZCU.Core.Domain
{
    public class Category:BaseEntity
    {
        public string Name { get; set; }
        public string Description { get; set; }
    }
}

2. Bölüm >>>

]]>
http://www.muratgozcu.com/?feed=rss2&p=121 0
2 – Blazor kurulumu ve proje oluşturma http://www.muratgozcu.com/?p=92 http://www.muratgozcu.com/?p=92#respond Thu, 30 May 2019 23:16:22 +0000 http://www.muratgozcu.com/?p=92 Blazor kullanmak için Visual Studio 2019 veya .Net Core 3.0 Preview SDK’sı yüklememiz gerekiyor Buradan indirin veya console ekranona aşağıdaki kodu yazın.

dotnet new -i Microsoft.AspNetCore.Blazor.Templates::3.0.0-preview5-19227-01

Blazor kurulumunu tamamladık,
Şimdi proje oluşturalım consol’a aşağıdaki gibi yazıyoruz.

dotnet new blazor -o BlazorApp

Aşağıdaki gibi dosya yapısı oluşacaktır. Blazor’un yapısı gereği Server ve Client olmak üzere iki farklı kütüphane de çalışacağız daha sonra



şimdi projemizi studio code ile açalım.
ve kodlarımızı yazalım.



dotnet run veya dotnet watch run komutu ile projeyi ayağa kaldırıp bir test edelim.
dotnet watch run ile çalışmak daha sağlıklı blazor’un bu sorunu nasıl çözeceğini bilmiyorum ama her yapılan değişiklikte projeyi debug etmek gerekiyor bu biraz fazla can sıkıcı oluyor proje geliştirirken. Html’ de yapılan değişikliklerde render işlemi yapılmıyor bu işlemi sürekli debug etmek yerine watch ile çözüyorum
Sizde öyle yapın 🙂 ama kod yazma performansı biraz düşüyor.
http://localhost:5000 ‘den test ediyoruz.

Projede butona tıkladığımızda sayac artıyor ve DOM işlemi gerçekleşiyor.

Bir 2 derste component oluşturacağız ve parametre göndereceğiz.
kolay gelsin.

]]>
http://www.muratgozcu.com/?feed=rss2&p=92 0
Entity framework ile nested model update, delete, insert http://www.muratgozcu.com/?p=58 http://www.muratgozcu.com/?p=58#respond Fri, 10 May 2019 15:05:54 +0000 http://www.muratgozcu.com/?p=58 Okumaya devam et Entity framework ile nested model update, delete, insert]]> Seo’ ya uyumlu başlık bulmaya çalışınca ben 🙂

Senaryomuzu kısaca anlatayım.
Bir üst tablomuz Product ve alt tablomuz ProductPrice. “Güncelle” butonuna bastığımızda gönderilen model’de product modelimiz update olacaktır. Alt tablomuz olan productPrice tablomuzda update olmayacak.
aynı anda client bazlı insert, update ve delete yaptığımızda aşağıdaki sorguda üç işlemi tek seferde yapacaktır.

Örnek Json Model
// var olan productPrice elemanlarınının state durumlarını delete yapıyoruz.
// Henüz silmedik
context.productPrice.Where(w => w.ProductId== myObject.Id).ToList()
 .ForEach(item => context.productPrice.Delete(item));
  
// İkinci aşamada model'den Idsi 0 olmayanlara state durumlarını update olarak tanımlıyoruz.
// Henüz Update etmedik
Model.ProductPrice
  .Where(x => x.Id != 0).ToList()
  .ForEach(order => context.productPrice.Update(order));

context.productPrice.Attach(myObject);
context.productPrice.Update(myObject);
await _unitOfWork.SaveChangesAsync();

Burada Put işlemi içerisine 3 işlem birden yaptırdık. Uzun uzun sorgular yazmak yerine daha kısa ve düzenlene bilir kod yazmış olduk.

Umarım faydası olmuştur.

]]>
http://www.muratgozcu.com/?feed=rss2&p=58 0