Mevcut Veritabanına İlk Kod
Bu adım adım kılavuz, mevcut veritabanını hedefleyen Code First geliştirmesine giriş sağlar. Code First, C# veya VB.Net sınıflarını kullanarak modelinizi tanımlamanızı sağlar. İsteğe bağlı olarak ek yapılandırma, sınıflarınızdaki ve özelliklerinizdeki öznitelikler kullanılarak veya akıcı bir API kullanılarak gerçekleştirilebilir.
Önkoşullar
Bu kılavuzu tamamlamak için Visual Studio 2012 veya Visual Studio 2013 yüklü olmalıdır.
Visual Studio için Entity Framework Araçları'nın 6.1 (veya üzeri) sürümünün de yüklü olması gerekir. Entity Framework Araçları'nın en son sürümünü yükleme hakkında bilgi için bkz. Entity Framework'leri alma.
1. Mevcut Veritabanı Oluşturma
Genellikle mevcut bir veritabanını hedeflediğiniz zaman zaten oluşturulur, ancak bu kılavuzda erişmek için bir veritabanı oluşturmamız gerekir.
Şimdi veritabanını oluşturalım.
Visual Studio’yu açın
Görünüm -> Sunucu Gezgini
Veri Bağlan ions -> Bağlan Ekle... öğesine sağ tıklayın
Veri kaynağı olarak Microsoft SQL Server'ı seçmeniz gerekmeden önce Sunucu Gezgini'nden bir veritabanına bağlanmadıysanız
LocalDB örneğine Bağlan ve Veritabanı adı olarak blog oluşturma
Tamam'ı seçtiğinizde yeni veritabanı oluşturmak isteyip istemediğiniz sorulur ve Evet'i seçin
Yeni veritabanı artık Sunucu Gezgini'nde görünür, sağ tıklayın ve Yeni Sorgu'yu seçin
Aşağıdaki SQL'i yeni sorguya kopyalayın, ardından sorguya sağ tıklayın ve Yürüt'e tıklayın
CREATE TABLE [dbo].[Blogs] (
[BlogId] INT IDENTITY (1, 1) NOT NULL,
[Name] NVARCHAR (200) NULL,
[Url] NVARCHAR (200) NULL,
CONSTRAINT [PK_dbo.Blogs] PRIMARY KEY CLUSTERED ([BlogId] ASC)
);
CREATE TABLE [dbo].[Posts] (
[PostId] INT IDENTITY (1, 1) NOT NULL,
[Title] NVARCHAR (200) NULL,
[Content] NTEXT NULL,
[BlogId] INT NOT NULL,
CONSTRAINT [PK_dbo.Posts] PRIMARY KEY CLUSTERED ([PostId] ASC),
CONSTRAINT [FK_dbo.Posts_dbo.Blogs_BlogId] FOREIGN KEY ([BlogId]) REFERENCES [dbo].[Blogs] ([BlogId]) ON DELETE CASCADE
);
INSERT INTO [dbo].[Blogs] ([Name],[Url])
VALUES ('The Visual Studio Blog', 'http://blogs.msdn.com/visualstudio/')
INSERT INTO [dbo].[Blogs] ([Name],[Url])
VALUES ('.NET Framework Blog', 'http://blogs.msdn.com/dotnet/')
2. Uygulamayı Oluşturma
İşleri basit tutmak için, veri erişimini gerçekleştirmek için Önce Kod kullanan temel bir konsol uygulaması oluşturacağız:
- Visual Studio’yu açın
- Dosya -> Yeni -> Proje...
- Sol menüden Ve Konsol Uygulaması'ndan Windows'ı seçin
- Ad olarak CodeFirstExistingDatabaseSample girin
- Tamam'ı seçin
3. Tersine Mühendislik Modeli
Visual Studio için Entity Framework Araçları'nı kullanarak veritabanına eşlemek üzere bazı ilk kodlar oluşturmamıza yardımcı olacağız. Bu araçlar yalnızca isterseniz el ile yazabileceğiniz kodlar oluşturur.
Proje -> Yeni Öğe Ekle...
Sol menüden Veri'yi seçin ve ardından Varlık Veri Modeli'ni ADO.NET
Ad olarak BloggingContext yazın ve Tamam'a tıklayın
Bu işlem Varlık Veri Modeli Sihirbazı'nı başlatır
Veritabanından Önce Kod'a tıklayın ve İleri'ye tıklayın
İlk bölümde oluşturduğunuz veritabanı bağlantısını seçin ve İleri'ye tıklayın
Tüm tabloları içeri aktarmak için Tablolar'ın yanındaki onay kutusuna tıklayın ve Son'a tıklayın
Tersine mühendislik işlemi tamamlandıktan sonra projeye bir dizi öğe eklenmiş olacak, şimdi de eklenen öğelere göz atalım.
Yapılandırma dosyası
Projeye bir App.config dosyası eklendi, bu dosya var olan veritabanına bağlantı dizesi içerir.
<connectionStrings>
<add
name="BloggingContext"
connectionString="data source=(localdb)\mssqllocaldb;initial catalog=Blogging;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework"
providerName="System.Data.SqlClient" />
</connectionStrings>
Yapılandırma dosyasındaki diğer bazı ayarları da fark edeceksiniz; bunlar Code First'e veritabanlarının nerede oluşturulacağını belirten varsayılan EF ayarlarıdır. Mevcut bir veritabanına eşlediğimiz için bu ayar uygulamamızda yoksayılır.
Türetilmiş Bağlam
Projeye bir BloggingContext sınıfı eklendi. Bağlam, verileri sorgulamamıza ve kaydetmemize olanak sağlayan veritabanı oturumunu temsil eder. Bağlam, modelimizdeki her tür için bir DbSet<TEntity> sunar. Varsayılan oluşturucunun name= söz dizimini kullanarak bir temel oluşturucuyu çağırdığını da fark edeceksiniz. Bu, Code First'a bu bağlam için kullanılacak bağlantı dizesi yapılandırma dosyasından yüklenmesi gerektiğini bildirir.
public partial class BloggingContext : DbContext
{
public BloggingContext()
: base("name=BloggingContext")
{
}
public virtual DbSet<Blog> Blogs { get; set; }
public virtual DbSet<Post> Posts { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
}
}
Yapılandırma dosyasında bir bağlantı dizesi kullanırken her zaman name= söz dizimini kullanmalısınız. Bu, bağlantı dizesi yoksa Entity Framework'ün kurala göre yeni bir veritabanı oluşturmak yerine oluşturmasını sağlar.
Model sınıfları
Son olarak, projeye bir Blog ve Post sınıfı da eklendi. Bunlar, modelimizi oluşturan etki alanı sınıflarıdır. İlk Kod kurallarının mevcut veritabanının yapısıyla uyumlu olmadığı yapılandırmayı belirtmek için sınıflara uygulanan Veri Ek Açıklamaları'nı görürsünüz. Örneğin, veritabanında en fazla 200 uzunluğunda olduklarından Blog.Name ve Blog.Url'de StringLength ek açıklamasını görürsünüz (Code First varsayılanı, veritabanı sağlayıcısı tarafından desteklenen uzunluk üst sınırını (SQL Server'da nvarchar(max) kullanmaktır).
public partial class Blog
{
public Blog()
{
Posts = new HashSet<Post>();
}
public int BlogId { get; set; }
[StringLength(200)]
public string Name { get; set; }
[StringLength(200)]
public string Url { get; set; }
public virtual ICollection<Post> Posts { get; set; }
}
4. Veri Okuma ve Yazma
Artık bir modele sahip olduğumuza göre, bazı verilere erişmek için bu modeli kullanma zamanı geldi. Aşağıda gösterildiği gibi Program.cs dosyasında Main yöntemini uygulayın. Bu kod bağlamımızın yeni bir örneğini oluşturur ve ardından bunu kullanarak yeni bir Blog ekler. Ardından, veritabanındaki tüm Blogları Başlığa göre alfabetik olarak sıralanmış olarak almak için bir LINQ sorgusu kullanır.
class Program
{
static void Main(string[] args)
{
using (var db = new BloggingContext())
{
// Create and save a new Blog
Console.Write("Enter a name for a new Blog: ");
var name = Console.ReadLine();
var blog = new Blog { Name = name };
db.Blogs.Add(blog);
db.SaveChanges();
// Display all Blogs from the database
var query = from b in db.Blogs
orderby b.Name
select b;
Console.WriteLine("All blogs in the database:");
foreach (var item in query)
{
Console.WriteLine(item.Name);
}
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
}
}
}
Artık uygulamayı çalıştırabilir ve test edebilirsiniz.
Enter a name for a new Blog: ADO.NET Blog
All blogs in the database:
.NET Framework Blog
ADO.NET Blog
The Visual Studio Blog
Press any key to exit...
Veritabanım Değişirse Ne Olur?
Önce Koddan Veritabanına sihirbazı, daha sonra ince ayar yapıp değiştirebileceğiniz bir başlangıç noktası sınıf kümesi oluşturmak üzere tasarlanmıştır. Veritabanı şemanız değişirse sınıfları el ile düzenleyebilir veya sınıfların üzerine yazmak için başka bir tersine mühendislik işlemi gerçekleştirebilirsiniz.
Mevcut Veritabanına İlk Kod Geçişlerini Kullanma
Mevcut bir veritabanıyla Code First Migrations kullanmak istiyorsanız bkz . Mevcut bir veritabanına Kod İlk Geçişleri.
Özet
Bu kılavuzda mevcut bir veritabanını kullanarak Code First geliştirmesini inceledik. Visual Studio için Entity Framework Araçları'nı kullanarak veritabanına eşlenen ve verileri depolamak ve almak için kullanılabilen bir sınıf kümesine ters mühendislik yaptık.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin