- Merhaba,
Öncelikle yazıyı özensiz şekilde hazırladığım için kusura bakmayın. Boş vakit bulduğumda (tabi bulabilirsem) düzenlemeye çalışacağım.,
LINQ ile çalışırken bir tabloya insert eden prosedürden gelen SCOPE_IDENTITY() verisini almak umduğumdan biraz daha karmaşıkmış. Aşağıda basit bir şekilde anlatmaya çalışacağım.
1-)Prosedürümüzü ID gönderecek şekilde düzenleyelim
Sadece OID ve Name alanı bulunan source adında bir tablomuz olsun. Bunun insert'i için yazacağımız prosedür aşağıdaki gibi olmalı
ALTER procedure [dbo].[TR_InsertSource]
@OID int OUTPUT,
@Name nvarchar(255)
AS
insert into source
( [Name] )
VALUES
( @Name )
set @ID= cast(SCOPE_IDENTITY() AS INT)
2-)Prosedürümüzü ve ilgili tabloyu DBML'e ekleyelim
bu kısım için detaylı açıklamayı vakit bulursam ekleyeceğim :(
3-)insert işlemi yapılacak tablo için Dbml deki değişikliklerimizi yapalım
- aşağıdaki gibi bir pencere açılacaktır
Burada Customize radiobutton unu seçiyoruz
çıkan dropdowndan stored procedure mizi seçiyoruz (benim kullandığım TR_InsertSource)
oiD olarak tanımladığımız alanın karşısında identity alan adımızın olduğundan emin olalım (OID)
sonra da OK butonuna basalım
Properties penceresi aşağıdaki gibi olacaktır:
3-)Kodumuzu güncelleyelim
- öncelikle yeni OID değerini tutacak bir değişken yaratalım:
int? sourceID = 0;
- şimdi prosedürü çalıştıracak kodu yazalım:
MDDBDataContext dc = new MDDBDataContext();
dc.TR_InsertSource(ref sourceID, txtName.Text)
prosedürün içine yazdığımız ref sourceID sayesinde yukarda integer olarak tanımladığımız sourceID alanına yeni OID değeri kaydedilecektir.
- şimdi de prosedürü çalıştıralım
dc.SubmitChanges();
kodun son hali aşağıdaki gibi olacaktır :
int? sourceID = 0;
MDDBDataContext dc = new MDDBDataContext();
dc.TR_InsertSource(ref sourceID, txtName.Text)
dc.SubmitChanges();
artık sourceID'yi istediğiniz gibi kullanabilirsiniz.
Umarım işinize yarar...