Sayfalar

18 Eylül 2013 Çarşamba

ASP.NET MVC - KOMPLE BİR PROJE YAPISI OLUŞTURMAK - 1

Bu yazılarda, örneklerini vereceğimiz teknolojiler ve yazılım teknikleri :  örnek bir mvc proje yapısı, code first, repository pattern, unit of work pattern, inversion of control pattern (Unity.Mvc ile), model mapping (AutoMapper ile), code first auto migration, service layer, dependency injection, area kullanımı, twitter bootstrap, grid.mvc, jquery, jquery ajax, viewmodels, custom membership provider, custom role provider, custom html helpers, fileupload, unit testing...

Evet tüm bunların hepsini tek proje içerisinde anlatmaya çalışacağım. (MVC dersleri ayrı olarak devam edecek, bu yazı biraz daha ileri seviye olabilir.) Çünkü şu an bunların hepsinin tek proje içerisinde nasıl birbiri ile alakalı olarak kullanıldığına dair kaynak yok gibi. Hepsinin ayrı ayrı nasıl kullanıldığı anlatılmış. Ama gerçek hayattan örneklerle ve tek proje içerinde birbiri ile ilişkili olarak nasıl kullanıldıkları hakkında bilgi sahibi olmak için proje incelemek gerekiyor.

Çoğu zaman dediğim gibi, yazacaklarım tam olarak standart birşey değil (mümkün olduğunca standart), yanlışlar hatalar olabilir. Farklı yaklaşımlarda olacaktır elbette. Benim yazacaklarım, piyasadaki açık kaynak projelerin genel anlamda, popüler olarak kullandığı teknoloji ve tekniklerdir. Fazla uzatmadan başlayalım.

Proje Altyapısı Oluşturma

Projelerimizi oluşturalım. Öncelikle bir tane boş bir solution oluşturalım ve daha sonra, asp.net mvc ve class library projelerimizi ekleyelim.

Yeni bir proje oluşturuyoruz.

Bu projemiz boş bir solution olacak.

Daha sonra gerekli olan projelerimizi ekleyeceğiz. İlk olarak bir mvc projesi oluşturalım.

Solution > sağ tık > Add > New Project

Mvc projemizi seçiyoruz. Bu uygulamayı .net 4.5 ve MVC4 ile yapacağız.

Biz Basic şablonunu seçeceğiz. Gerekli olan tüm eklemeleri kendimiz yapacağız.

Şimdide sınıf kütüphanelerimizi ekleyelim. Webprojesini eklediğimiz şekilde (Solution > sağ tık > Add > New Project) bu kez bir Class Library Projesi ekliyoruz.

Bu şekilde birkaç tane Class Library projesi oluşturalım. Oluşturacağımız ClassLibrary projelerinin adları :
MvcProject.Data, MvcProject.Domain, MvcProject.IOC, MvcProject.Services, MvcProject.Test yani şimdilik web projesi ve test projesi ile beraber, solution içerisinde 6 tane projemiz olacak. Uygulamamızın solution kısmının görüntüsü aşağıdaki gibidir.

Projelerimizi bu şekilde ekledikten sonra, projelerimizin hepsini birden varsa güncellemelerini yapalım. Bunun için Solution > Sağ Tık > Manage Nuget Packages ...

dedikten sonra açılan pencerede Updates sekmesine geliyoruz. Burada Update All butonuna tıklayarak, tüm projelerdeki yüklü olan kütüphaneleri güncelliyoruz.

Veritabanı Modellerini Oluşturma

Projemiz kodlama için hazır gibi. İlk önce veritabanı modellerimizi belirleyelim. Genel olarak bir projeye başlamadan önce, o proje için bir veritabanı tasarımı yapılır. Bizde codefirst ile geliştirme yapacağımız için öncelikle veritabanı modellerimizi ekleyelim.

WebProject.Domain projesi altında DomainModel adında bir klasör oluşturup, modellerimizi oraya ekleyeceğiz. Öncelikle, veritabanını temsil eden sınıflar ile diğer tüm sınıfları ayırmak için, bir tane Entity adında abstract sınıf oluşturalım ve veritabanı modellerimiz bu sınıftan kalıtım alsın.

Entity.cs
namespace MvcProject.Domain.DomainModel.Entities
{
    /// <summary>
    /// Entity sınıflarını temsil eden genel entity sınıfı
    /// tüm entity sınıfları bu sınıftan kalıtım alır
    /// </summary>
    public abstract class Entity
    {
    }
}

User.cs
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
 
namespace MvcProject.Domain.DomainModel.Entities
{
    [Table("User")]
    public class User : Entity
    {
        public User()
        {
            this.Roles = new HashSet<Role>();
        }
 
        public int Id { getset; }
 
        [StringLength(50)]
        public string UserName { getset; }
 
        [StringLength(150)]
        public string DisplayName { getset; }
 
        [StringLength(50)]
        public string Password { getset; }
 
        [StringLength(150)]
        public string Email { getset; }
 
        [StringLength(250)]
        public string ProfileImageUrl { getset; }
 
        public DateTime LastLoginDate { getset; }
 
        [StringLength(20)]
        public string LastLoginIP { getset; }
 
        public virtual ICollection<Role> Roles { getset; }
    }
}

Role.cs
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
 
namespace MvcProject.Domain.DomainModel.Entities
{
    [Table("Role")]
    public class Role : Entity
    {
        public Role()
        {
            this.Users = new HashSet<User>();
        }
 
        public int Id { getset; }
 
        [StringLength(50)]
        public string Name { getset; }
 
        public virtual ICollection<User> Users { getset; }
    }
}

Bu eklemelerden sonra, Domain projesinin görüntüsü,

Roller ve Kullanıcılar arasında, many-to-many ilişkisi vardır. Bundan dolayı UserInRole adında bir ara tablo oluşturup, bu iki tabloyu ilişkilendirebiliriz. Tabi UserInRole tablosunu, bir model olarak tanımlamayacağız. Model Mapping ile bu iki tablo arasında ilişki kurup, ara tabloyu bu ilişki içerisinde tanımlamayacağız. Normalde bu hali ile codefirst otomatik olarak ara tabloyu oluşturacaktır. FK olarak ta User_Id ve Role_Id tanımlayacaktır. Tablo isminide codefirst kendisi tanımlayacaktır. Tüm bunları biz yapmak istiyorsak, model mapping yapacağız. Model mapping için, Data projesi içerisinde oluşturduğumuz mapping klasörü altında UserMapping adında bir sınıf oluşturalım.

UserMapping.cs
using MvcProject.Domain.DomainModel.Entities;
using System.Data.Entity.ModelConfiguration;
 
namespace MvcProject.Data.Mapping
{
    public class UserMapping : EntityTypeConfiguration<User>
    {
        public UserMapping()
        {
            // kullanici-rol ara tablosu oluşturma
            HasMany(h => h.Roles).
            WithMany(e => e.Users).
            Map(
                m =>
                {
                    m.MapLeftKey("UserId");
                    m.MapRightKey("RoleId");
                    m.ToTable("UserInRole");
                }
            );
        }
    }
}

Şimdi uygulamamızın, context ini oluşturabiliriz. Data projesi içerisinde, Context klasörüne MvcProjectContext adında bir sınıf oluşturalım.

MvcProjectContext.cs
using MvcProject.Data.Mapping;
using MvcProject.Domain.DomainModel.Entities;
using System.Data.Entity;
 
namespace MvcProject.Data.Context
{
    public class MvcProjectContext : DbContext
    {
        public MvcProjectContext()
            : base("DefaultConnection")
        {
            Configuration.LazyLoadingEnabled = true;
        }
 
        public DbSet<Role> Role { getset; }
        public DbSet<User> User { getset; }
 
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Configurations.Add(new UserMapping());
 
            base.OnModelCreating(modelBuilder);
        }
    }
}

Data projesinin son hali,

Bu arada öenmli bir nokta, eksik olan dll leri yüklemeniz gerekiyor projelere, örneğin, Data ve Domain, projelerine Entity Framework eklemelisiniz. Bunları geçiyorum, çünkü zaten sınıfları oluşturduğunuzda uyarı alacaksınız. Entity Framework yüklemek içinde yine Nuget Manager ı kullanarak, en son sürümünü ekleyebilirisiniz.

Buraya kadar anlattıklarımla, bir veritabanı oluşturabiliriz. veritabanının oluşrulma ve yönetilmesini, Package Manager Console dan yapacağız. Tabi isteyenler, global.asax içerisinde veritabanı oluştuma stratejisini belirleyebilir.

CodeFirst veri tabanı oluşturma stratejisi

CodeFirst Auto Migration

Öncelikle website projesi içerisindeki webconfig dosyasında bir connectionString belirliyoruz. Sanki veritabanı varmış gibi direk oluşturmak istediginiz veritabanı ismini yazabilirsiniz. Örneğin;
<connectionStrings>
    <add name="DefaultConnection" providerName="System.Data.SqlClient" connectionString="Data Source=localhost;Initial Catalog=MvcProjectDB;Integrated Security=True;" />
  </connectionStrings>

gibi.Veritabanını console dan yönetmek için package manager console u açıyoruz:

ve Data projesi seçiliyken Enable-Migrations –EnableAutomaticMigrations yazıyoruz.

Komutu çalıştırdığımızda aşağıdaki gibi bir hata alırız:

Context sınıfımız DefaultConnection adında, bir connectionString ismi ile veritabanına bağlanmaya çalışıyor. Bu connectionString Data projesi içerisinde değil, Website projesi içerisinde. Bunun için, Website projesine, Test, dışındaki tüm projeleri referans ediyoruz.

Şimdi komut satırını tekrar çalıştırınca, Data projesi içerisine Migrations adında bir klasör oluşacaktır. Yine Komut satırından, Update-Database komutunu girip çalıştırdığımızda veritabanımız oluşacaktır. Console ekranı;

Oluşan veritabanı;

Peki modellerimize yeni bir alan eklersek, ve ya alan ismini değiştirirsek, ve ya da alanı silersek ne olacak. Veritabanını nasıl güncelleyeceğiz. Tek yapmamız gereken, model üzerinde yaptığımız her değişiklikten sonra Package Manager Console ekranında, Update-Database komutunu çalıştırmak, böylece veritabanımız güncellenecektir.

Burada önemli olan, bir alan silindiğinde veri kaybı olacağından otomatik update çalışmayacaktır. Bunun için Migration klasörü içerisindeki configuration sınıfının constructor metoduna şu satırı eklemeliyiz:
AutomaticMigrationDataLossAllowed = true;

Bir sonraki yazıda, Repository, Service, Unit of Work katmanlarını oluşturacağız.

64 yorum:

  1. Makaleni inceledim. Gerçekten yararlı bir makale olmuş. Bu makalede codefirst yapısını, class library oluşturmayı ve projeye referans yapmayı öğrendim. Makalenin devamını bekliyorum. Emeğine sağlık.

    YanıtlaSil
  2. Peki codefirst yapısında rol ve user tablosunu eklediğimiz gibi istediğimiz tabloyu classlarda tanımlayıp update-database komutunu çalıştırırsak oluşturduğum tablelar databaseime eklenir mi?

    YanıtlaSil
    Yanıtlar
    1. Evet. Eklediğiniz sınıfları, Context sınıfı içerisine de ekleyip, update-database komutunu çalıştırırsanız, tablolar veritabanına eklenir.

      Sil
    2. Eklenir ancak ilişkileri gelmez ilişkili irden fazla tablo ekliyorsan. mappinglerinide yazman gerekmektedir.

      Sil
  3. Gerçekten çok faydalı bir makale olmuş teşekkür ederim. Devamını heyecanla bekleyeceğim. Lütfen fazla bekletme bizi.

    YanıtlaSil
    Yanıtlar
    1. Hocam aslında makale yazmak zaman alıyor. Proje hazır, hatta birkaç tane proje var. Ama makale yazmadaki tecrübesizlik, ekran görüntülerini hazırlama, konu bütünlüğü, işlem sırası gibi şeylerle uğraşmak geciktiriyor. En kısa zaman da devamını paylaşacağım. Bu arada; yorumlar, sorular ve tavsiyeler motive ediyor. Bundan dolayı ben teşekkür ederim

      Sil
  4. Merhaba,
    Database oluşturma kısmını bir türlü yapamadım. Ne yaptımsa olmadı. Aynen dediğinizi yazdığımda
    DefaultConnection(MvcProject.Website) diye bir bağlantı ve altında
    _MigrationHistory
    AspNetRoles
    AspNetTokens
    ....

    gibi tablolar oluşturuyor.

    YanıtlaSil
    Yanıtlar
    1. Hata alıyor musunuz? Package Manager Console açıkken, bu console ekranındaki dropdownlistte Data projesi şeçili olmalı. Enable-Migrations –EnableAutomaticMigrations komutunu ilk yazdığımız ekranı gösterdigim resimde, işaretlemişim buraya dikkat edin.

      Sil
    2. yok hiçbir hata almıyorım yukarda ki gibi dediğim database oluşuyor.

      Sil
    3. _MigrationHistory zaten oluşacak onda sorun yok, ama Role ve User Tablolarıda oluşmuyor mu? Bunlar oluşmuyorsa, MvcProjectContext sınıfına bu modelleri eklememişsiniz demektir. Kodlarınızı görme şansımız var mı? daha net cevap yazabilirim.

      Sil
    4. hiçbir sorun yok gibi. Projeyi aşağıdaki linkten indirebilirsin.
      http://we.tl/vDMIkMsVi9

      Sil
    5. Projeniz sanırım, VS 2013, MVC5 ve EF6. Web projesi içerisindeki, EF nin versiyonu 6, diger projeler içerisindeki EF lerin versiyonu 5. Ayrıca, Internet şablonu şeklinde bir web uygulaması açtığınızdan dolayı, üyelik sistemi hazır geliyor ve oluşan tablolarda aslında bu üyelik sisteminin tabloları. Bu şekilde benim gösterdiğim, sıralamayla gidemeyiz. VS 2013 ve içerisindeki neredeyse tüm teknolojiler hala beta aşamasında. Ama yinede EF nin versiyonlarını Manage Nuget Packages ile güncelleyip deneyebilirsiniz.

      Sil
    6. tamam ben vs2012 ile deniyim o zaman teşekkür ederim

      Sil
    7. Merhaba,
      Vs2012 ile aynı şeyleri yaptım yine aynısı oldu. Bende anlamadım. :)) Web şablonunu da Basic açtım ama yine aynı tablolar oluştu. Bizim databaseden ses seda yok

      Sil
    8. Yeni oluşturdugunuz projeyi de gönderin isterseniz bakayım.

      Sil
    9. Walla çok teşekkür ederim size de zahmet oluyor.
      http://we.tl/wDuQMwA7C6

      Sil
    10. Neden oldugunu anlamadım ama, Data projesi içerisindeki App.Config dosyasını aşagıdaki kodlarla değiştirin: (sebebini araştıracagım)














      Sil
    11. Sanırım kodlar gelmiyor, bana mail adresinizi yazın kodları gondereyim (alirizaadiyahsi@gmail.com)

      Sil
    12. walla çok teşekkür ederim.
      çok zahmet oldu.

      Sil
    13. mailime kodlar gelmedi

      Sil
  5. Yazının devamını bekliyoruz. 12 gün oldu.

    YanıtlaSil
    Yanıtlar
    1. Hocam kusura bakmayın işler yoğun biraz, bugün akşam yetiştirirsem yayınlayacağım.

      Sil
    2. sen kusura bakma asıl. Doğru dürüst MVC yi anlatan tek türkçe site burası. Bizde bekliyoruz işte. Hello world örnekleriyle dolu diğer siteler aşamadılar daha.

      Sil
  6. Hocam Saygılar Öncelikle;

    AutoMapper kullanarak database oluşturma işlemini bir türlü yapamadım. Bununla ilgili detaylı anlatan bir kaç site makale yada dökümana yönlendirme imkanınız varmı ? Yardımlarınız için şimdiden çok teşekkür ederim

    YanıtlaSil
    Yanıtlar
    1. The ForeignKeyAttribute on property ‘XXXX’ on type ‘XXXXXX’ is not valid. The foreign key name ‘XXXX’ was not found on the dependent type ‘XXXXXXX’. The Name value should be a comma separated list of foreign key property names.

      Hatası neden alınır ?

      Sil
    2. Automapper değilde auto migration demek istediniz galiba, neyse ikinci yorumda yazdığınız hatayı benim kodlarımı yazdığınızda mı alıyorsunuz? Bu aldığınız hata ile alakalı kodlarını görmek lazım. Yani veritabanı model sınıfınızı görmek gerekiyor. İstediğiniz link: http://msdn.microsoft.com/en-us/data/jj554735.aspx

      Sil
  7. Bu yorum yazar tarafından silindi.

    YanıtlaSil
  8. Çok güzel bir makale Emeğinize Sağlık

    Modelimizi Codefirst değilde Database Generate olarak oluştursaydık User,rol,MvcProjectContext,Entity Classlarını oluşturmamıza gerek kalacakmıydı,yani Database Generate etseydik projemizde nasıl değişiklik olacaktı.

    YanıtlaSil
    Yanıtlar
    1. database first yaparsaniz zaten o siniflar otomatik olusacak. mvcprojectcontext adli sinifta zaten entity sinifiniz olacak. data katmanindaki siniflar otomatik olusacak.

      Sil
  9. Bu konuyu anlatan ve turkce okudum en iyi makale.Tesekkurler.MVC ile ilgili daha fazla makalelerinizi bekliyorum.Ayrica yazdiginiz kodlari aciklamaniz cok iyi olmus.

    YanıtlaSil
  10. Ali bey tüm entitylerin kullandığı soyut bir sınıf tanımlamışsınız ancak kullanmamışsınız. Bence ortak kolonları (mesela id gibi) onun içersine yerleştirirseniz çok daha hoş olacaktır.
    Takipteyim :)

    YanıtlaSil
  11. Merhaba mekalenizi inceledim şu an vaktim olmadığı için diğer makalelerinize bakmayı dört gözle bekliyorum. Makalelerinizi basit ve çok anlaşılır halde anlatıyorsunuz sizin gibi anlatan yok diyebilirim tek seferde anlıyorum. Başarılarınızın devamını dilerim

    YanıtlaSil
  12. hocam merhaba bu konuya bakmanızı rica ediyorum teşekkürler
    http://www.kodhatasi.com/soru/1205/mvc-baska-projedeki-controlu-calistirmak

    YanıtlaSil
    Yanıtlar
    1. ismim yukarıda çıkmamış düzeltebilirseniz
      serdar

      Sil
    2. Anlattığınız gibi bir uygulama yapmadım. Ama açık kaynak e-ticaret siteleri sizin dediğiniz şekilde çalışıyor. İsterseniz onları inceleyip fikir alabilirsiniz. Örneğin: http://nopcommerce.codeplex.com/SourceControl/latest

      Sil
  13. Benim biraz farklı bir sorum olacak. Tek bir modelden türetip aynı yapıda birden çok tablo oluşturmak mümkün mü? Mesela Users.cs den Users1 Users2 gibi SQL tabloları.

    YanıtlaSil
    Yanıtlar
    1. Evet mümkün. User dan kalıtım alan sınıfları da, context içerisin de tanımlarsanız, bu tablolar da oluşacaktır.

      Sil
  14. Merhaba Ali Rıza bey,
    Elinize sağlık çok güzel bir makale olmuş fakat bir sorum olacak classlardaki değişikliği db'de güncellerken yeni bir class oluşturduğumda db'de table oluşturmuyor ve şu hatayı veriyor
    "Specify the '-Verbose' flag to view the SQL statements being applied to the target database.
    No pending explicit migrations.
    Applying automatic migration: 201401202141060_AutomaticMigration."

    YanıtlaSil
    Yanıtlar
    1. Aslında yapmak istediğim CodeFirsth ile oluşturulan database sonradan class ile tablo eklemek yukarıdaki anltım karışık geldi bana~

      Sil
    2. Yani sınıfı nasıl eklediniz. Yeni sınıf eklediginizde bu sınıfı Context sınıfı içerisinde de tanımlar ve update-database derseniz bu sınıf tablo olarak eklenecektir. Bazen ilişkilerden dolayı ve ya veri kaybına yol acacak durumlarda update-database calısmayabilir. Bu sınıfları nasıl eklediğinizle alakalı.

      Sil
  15. The project 'MvcProject.Website' failed to build. hatası alıyorum herşey birebir aynı neden olabilir acaba

    YanıtlaSil
  16. Çok güzel bir anlatım olmuş. Tüm derslerinizi takip ettim. anca gelebildim buralara. ilk başlarda biraz zorlansamda sonunda başarı ile çalıştırabildim. Peki bir sorum olacak size. Global.asax ile de console dan komut yazmadan yapılabilir demişsiniz ufak bir örnek veya yol gösterebilirmisiniz? O sanki biraz daha kolay olacak gibi geldi de bunda her işlem sonrasında console dan kod yazmak biraz yazılımcı için uğraş.
    Ellerinize sağlık. Sizler gibi abilerimiz sayesinde gerçek yazılımların nasıl gelişip serpildiklerini anlayabiliyoruz. Özelliklede piyasada bizim gibi tek başına kod yazanlar için bulunmaz nimetsiniz. Umarım yazılarınıza eder, bizlerin ışığı olarak yolumuzu aydınlatırsınız.

    YanıtlaSil
    Yanıtlar
    1. codefirst initialization strategies:

      http://www.entityframeworktutorial.net/code-first/database-initialization-strategy-in-code-first.aspx

      console dan yapmak daha basit ama.

      Sil
  17. Öncelikle makaleniz için teşekkürler,

    PM> Update-Database
    Specify the '-Verbose' flag to view the SQL statements being applied to the target database.
    System.TypeInitializationException: The type initializer for 'System.Data.Entity.Internal.AppConfig' threw an exception. ---> System.Configuration.ConfigurationErrorsException: An error occurred creating the configuration section handler for entityFramework: Could not load file or assembly 'EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040) (E:\PROJECTS\MvcDeneme\MvcDeneme\tmp7AA1.tmp line 9) ---> System.IO.FileLoadException: Could not load file or assembly 'EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

    buradaki hatayı neden alıyor olabilirim acaba ?

    YanıtlaSil
    Yanıtlar
    1. VS12 kullanıyorsanız ve EntityFramework ü güncellediyseniz, bundan olabilir.

      Sil
    2. VS13 Kullanıyorum EF'ü gösterdiğiniz yollar ile güncelledim, ne yaptıysam çalışmıyor

      Sil
    3. Tekrar merhaba, MvcProject.Data'yı set as startup project yaptım, ilk hatadan kurtuldum ancak bu kez de şöyle diyor ;

      Specify the '-Verbose' flag to view the SQL statements being applied to the target database.
      No pending code-based migrations.
      Applying automatic migration: 201402191318523_AutomaticMigration.
      Running Seed method.

      Sil
    4. startup project web projesi olmalı, ama console da update-database işlemi çalıştırırken, data projesinin seçili olması gerekiyor. Bu şekilde bir sorunla karşılaşmamanız gerekiyor. Bu arada, komutunuz çalışmış görünüyor. Yani yazdığınız mesaj bir hata mesajı değil.

      Sil
    5. startup olarak web projesini aldığımda en yukarıdaki hatayı tekrar alıyorum Specify the '-Verbose' flag ile başlayan bildirimde bir exception değil ancak databaseler oluşmuyor, acaba size bi projeyi göndersem bakabilir misiniz ?

      Sil
    6. olur, mail atarsanız bakabilirim: alirizaadiyahsi@gmail.com

      Sil
  18. data klasörü üzerinde iken aldığım hata
    The EntityFramework package is not installed on project 'MvcProject.Data'.

    YanıtlaSil
    Yanıtlar
    1. sorunun cevabımı kendim yazayım bari :)

      PM> install-package EntityFramework

      Sil
  19. Hocam merhabalar. Yazılarınızı okuyorum ve çok güzel bilgiler vermişsiniz çok teşekkür ederim.

    Sorum şu :
    Bu User sınıfını interface olarak oluştursak yine aynı şekilde databe tarafına eklenebilir mi?

    Teşekkürler.

    YanıtlaSil
  20. Bu yorum yazar tarafından silindi.

    YanıtlaSil
  21. merhabalar. öncelikle yazılarınızı çok faydalı bulduğumu belirtmek isterim. işin içerisinden çıkamadığım bir kaç noktada yardımlarınızı rica ediyorum.

    ilk olarak ; code first ile foreignKey ve kısıtlama oluştururken id yerine ilişkilendirme ve kısıtlamaları kurumKodu ve ürünKodu üzerinden yapmak istiyorum. ancak başarılı olamadım. fluentApi ve modelBuilder inceledim ancak yeterli türkçe kaynak bulamadım ve bir tütlü başarılı olammadım.

    ikinci olarak hasseti niçin kullanıdığınızı anlayamadım.

    bu konuda yardımlarınızı bekliyorum hatta bir makale süper olur.

    teşekkürler

    YanıtlaSil
  22. Elinize sağlık, arayıp bulamadığım bir yazı olmuş. Küçük bir bir önerim var. Sonraki ve önceki makale şeklinde link koyarsanız sonraki yazılara erişim de kolaylaşır. Google'dan buraya gelince bu yazının ikincisi nerede bulunamayabilir..

    YanıtlaSil
  23. Elinize sağlık, arayıp bulamadığım bir yazı olmuş. Küçük bir bir önerim var. Sonraki ve önceki makale şeklinde link koyarsanız sonraki yazılara erişim de kolaylaşır. Google'dan buraya gelince bu yazının ikincisi nerede bulunamayabilir..

    YanıtlaSil
  24. Bu yorum yazar tarafından silindi.

    YanıtlaSil
  25. PM> Enable-Migrations –EnableAutomaticMigrations
    The project 'ProjectName' failed to build.

    Bir şeyler yaptım ama bu sefer de böyle bir hata aliyorum,
    enable diyorum olmuyor.

    YanıtlaSil
    Yanıtlar
    1. Projenizde derleme zamanında alınan hatalar vardır. Projeyi re-build etmeyi deneyip, alınan hataları düzeltin. Bu blogda yazdıklarımın üzerinden çok zaman geçti. Bazıları artık eskidi. Çok fazla girip cevap yazamıyorum. alirizaadiyahsi@gmail.com üzerinden sorularınız olursa, müsait olduğum sürede cevap yazmaya çalışırım.

      Sil
  26. Bu yorum yazar tarafından silindi.

    YanıtlaSil
  27. MERHABA HOCAM BİR YERDE HATA ALIYORUM HATA ALDIĞIM KISIM İSE VERİ TABANINA BAĞLARKEN UPDATE-DATABASE DEDİKDEN SONRA ŞU HATAYI VERİYOR
    :A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specified)

    BENİM VERİ TABANINDA ŞİFRE YOK SADECE SERVER ADINI VE KULLANICI ADINI YAZIYORUM FAKAT BU HATAYI ALIYORUM KONU HAKKINDA BANA YARDIMCI OLURMUSUNUZ SAYGILAR.

    YanıtlaSil