Archive for the ‘LINQ’ Category
Linq to Sql ile Entity Framework Karşılaştırması
Linq to Sql ile Entity Framework arasındaki farklar hep sorulmuştur. Bugün araştırma yaparken detaylı bir makale buldum. Faydalı olabileceğini düşünerek aşağıda paylaşıyorum :
Flexible Data Access With LINQ To SQL And The Entity Framework : http://bit.ly/eXhnwg
Linq To Sql ile Kalıtım
Linq hayatımıza girdiğinden beri görüş açımız değişti. En azından benim değişti. Önceden çekinerek baktığımız olaylar artık hayatımızın değişmez parçaları oldu. Bugün biraz derinlemesine araştırdığım Linq To Sql tarafındaki kalıtım ile ilgili makalelere ilginizi çekmek istiyorum.
Linq to Sql ile veri tabanından gelen bilgiler .Net nesnelerine dönüştürülmekte. Böylece bu iş için oluşturulmuş gerçek tipli nesneler sayesinde hem performans artışı hemde tip güvenliğine sahip oluyoruz.
Linq to Sql’in kalıtım özellikleri ile aynı tablo içerisinde tutmuş olduğumuz verileri .Net nesneleri haline getirirken bunlar için farklı nesneler oluşturulmasını sağlattırabiliyoruz. İsterseniz bunun için önce basit bir örneği düşünelim. Elimizde personel bilgilerini tutan bir tablo olsun. Bu tablo içindeki bir kolonda departman bilgisi tutulsun. Bu bilgi personelin satış, pazarlama, IT veya Yönetim departmanlarından birinde çalıştığını göstersin. En basit anlamda bu tabloyu Linq To Sql ile nesneler haline dönüştürdükten sonra bütün çalışanları tek bir tip ile ifade edildiğini göreceğiz. Ancak, Linq To Sql’in kalıtım özelliği sayesinde aslında her departman için bir Tip üretip, çekilen veride yer alan departman bilgisine göre bu tiplerden uygun olanın nesnesinin üretilmesini sağlattırabiliriz. İşte bu güzel bir özellik. İleride bununla ilgili daha detaylı bir yazı hazırlayacağım, ancak o zamana kadar aşağıdaki makalelere bir göz atabilirsiniz.
Version Upgrader
Sizde benim gibi versiyon takibi için sürekli assembly.cs dosyasının yolunu tutuyorsanız, benim bu işe bir son vermek amacıyla yazmış olduğum aşağıdaki küçük programcığı kullanmaya başlayabilirsiniz. Amacım parametrede belirtilen dizin ve bütün alt dizinlerindeki assembly.cs dosyalarını bulup, içlerindeki versiyon bilgisinin revision değerini bir arttırmak. İşinize yaraması dileğimle.
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
namespace VersionUpgrader
{
class Program
{
static void Main(string[] args)
{
if (args.Length < 1)
{
Console.WriteLine("Lütfen arama yapılacak dizini giriniz.");
return;
}
string dizin = args[0];
var di = new DirectoryInfo(dizin);
if (di.Exists)
{
Console.WriteLine("VersionUpgrader is searching at {0}.", di.FullName);
FindDirectory(di);
Console.WriteLine("VersionUpgrader search finished at {0}.", di.FullName);
}
else
{
Console.WriteLine("Girmiş olduğunuz dizin bulunamadı.");
return;
}
}
private static readonly Regex rx1 =
new Regex(
@"\[assembly: AssemblyVersion\(\""([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\""\)\]",
RegexOptions.Multiline | RegexOptions.IgnoreCase | RegexOptions.Compiled);
private static readonly Regex rx2 =
new Regex(
@"\[assembly: AssemblyFileVersion\(\""([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\""\)\]",
RegexOptions.Multiline | RegexOptions.IgnoreCase | RegexOptions.Compiled);
private static void FindDirectory(DirectoryInfo di)
{
var fid = di.GetFiles("AssemblyInfo.cs");
if (fid.Length > 0)
{
foreach (FileInfo info in fid)
{
var s = File.ReadAllText(info.FullName);
var changed = new StringBuilder();
s = rx1.Replace(s, x =>
{
changed.AppendFormat(
"AssemblyVersion(\"{0}.{1}.{2}.{3}\" => \"{0}.{1}.{2}.{4}\")",
x.Groups[1].Value,
x.Groups[2].Value,
x.Groups[3].Value,
x.Groups[4].Value,
(int.Parse(x.Groups[4].Value)) + 1);
return string.Format(
"[assembly: AssemblyVersion(\"{0}.{1}.{2}.{3}\")]",
x.Groups[1].Value,
x.Groups[2].Value,
x.Groups[3].Value,
(int.Parse(x.Groups[4].Value)) + 1);
});
s = rx2.Replace(s, x =>
{
if (changed.Length > 0)
{
changed.Append(" , ");
}
changed.AppendFormat(
"AssemblyFileVersion(\"{0}.{1}.{2}.{3}\" => \"{0}.{1}.{2}.{4}\")",
x.Groups[1].Value,
x.Groups[2].Value,
x.Groups[3].Value,
x.Groups[4].Value,
(int.Parse(x.Groups[4].Value)) + 1);
return string.Format(
"[assembly: AssemblyFileVersion(\"{0}.{1}.{2}.{3}\")]",
x.Groups[1].Value,
x.Groups[2].Value,
x.Groups[3].Value,
(int.Parse(x.Groups[4].Value)) + 1);
});
if (changed.Length > 0)
{
s = string.Format(
"{0}\r\n// This file changed by VersionUpgrader at {1:G} << {2} >>",
s, DateTime.Now, changed);
}
File.WriteAllText(info.FullName, s);
Console.WriteLine("{0} is changed.", info.FullName);
}
}
var did = di.GetDirectories();
if (did.Length <= 0) return;
foreach (DirectoryInfo dii in did)
{
FindDirectory(dii);
}
}
}
}
Visual Studio 10 ve Microsoft.Net 4.0 Tanıtım Filmleri
Merhaba, Visual Studio 2008 den sonraki VS versiyonu olan Visual Studio 2010 beta sürüm olarak yayınlandı. Acaba yeni neler var diye merak ettiğimde Channel9 da bu konuda uzun soluklu bir Video serisinin bulunduğunu gördüm. Eğer daha önce görmediyseniz bu serinin içindekileri aşağıda link olarak sizlerle paylaşıyorum. Bir bakmanızı tavsiye ederim.
- 10-4 Episode 1: Working with the Visual Studio 2010 CTP VPC
- 10-4 Episode 2: Welcome to Visual Studio 2010
- 10-4 Episode 3: ASP.NET WebForms 4.0
- 10-4 Episode 4: No More Parallel Development Pain
- 10-4 Episode 5: Code Focused in Visual Studio 2010
- 10-4 Episode 6: Parallel Extensions
- 10-4 Episode 7: No More Planning Black Box
- 10-4 Episode 8: Pure Client-Side Development with ASP.NET AJAX 4.0
- 10-4 Episode 9: Visual Basic 10
- 10-4 Episode 10: Making Web Deployment Easier
- 10-4 Episode 11: Bi-Directional Routing with ASP.NET WebForms 4.0
- 10-4 Episode 12: Simplifying Your Code With C# 4.0
- 10-4 Episode 13: No More Late Surprises
- 10-4 Episode 14: Sentient DSLs
- 10-4 Episode 15: Model-First Development with the Entity Framework 4.0
- 10-4 Episode 16: Windows Workflow 4
- 10-4 Episode 17: F# Intro
- 10-4 Episode 18: Functional UI Testing
- 10-4 episode 19: Service Discovery with WCF
- 10-4 Episode 20: Downloading and Installing Visual Studio 2010 Beta 1
- 10-4 Episode 21: Web Tooling Improvements
- 10-4 Episode 22: Simplifying Data-Driven Web Applications
- 10-4 Episode 23: An Introduction to Manual Testing
- 10-4 Episode 24: Monitoring Workflow Services
Entity Framework’te Include Metodu
Entity Framework Lazy Loading üzerinde çalışırken iç içe bağlantılarda problemler çıktı. Load ile çözüm bulamadığım bir anda Include Metodu ile problemim çözüldü.
Yine Northwind veri tabanınından örnek verecek olursak: Products tablosundan veriyi çektik, Order Details tablosuna ulaştık. Oradanda Orders tablosuna ulaşmak gerekiyorsa, Şu tür bir yazım çalışma zamanında hata ile karşılaşacaktır.
var product = DataContext.Products
.Include("Order_Details")
.Include("Orders")
.First( x=> x.ProductID == 10);
var orderDetails = product.Order_Details.ToArray();
Bunun sebebi, Include belirtilen tabloda yer alan Navigation Properties içerisindeki tabloları yükleyebilir. Ama alt tablolardakileri yüklemek gerekiyorsa, o zaman aralarında “.” olacak şekilde, önce üst tablo ismini yazmak, sonrada alt tablo ismini yazmak gerekir. Doğru komut şu şekilde olmalıdır.
var product = DataContext.Products
.Include("Order_Details")
.Include("Order_Details.Orders");
.First( x=> x.ProductID == 10);
var orderDetails = product.Order_Details.ToArray();
