Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
LINQ to SQL nesneleri her zaman bazı durumlarda yer alır. Örneğin, LINQ to SQL yeni bir nesne oluşturduğunda nesne Unchanged durumuna geçer. Kendi oluşturduğunuz yeni bir nesne DataContext için tanıdık değil ve Untracked durumundadır. Başarılı bir yürütme sonrasında SubmitChanges, LINQ to SQL tarafından bilinen tüm nesneler Unchanged durumundadır. (Tek istisna, veritabanından başarıyla silinenler tarafından temsil edilir, Deleted durumundadır ve bu nedenle söz konusu DataContext örnekte kullanılamaz.)
Nesne Durumları
Aşağıdaki tabloda LINQ to SQL nesnelerinin olası durumları listelenmiştir.
| Devlet | Açıklama |
|---|---|
Untracked |
LINQ to SQL tarafından izlenmemiş bir nesne. Örnekler şunlardır: - Geçerli DataContext üzerinden sorgulanmamış bir nesne (yeni oluşturulmuş bir nesne gibi). - Serisizleştirme yoluyla oluşturulan bir nesne - Farklı bir DataContext aracılığıyla sorgulanan bir nesne. |
Unchanged |
Geçerli DataContext kullanılarak alınan ve oluşturulduğundan beri değiştirildiği bilinmeyen bir nesne. |
PossiblyModified |
öğeye iliştirilmiş bir DataContext nesne. Daha fazla bilgi için bkz. N Katmanlı Uygulamalarda Veri Alma ve CUD İşlemleri (LINQ to SQL). |
ToBeInserted |
Geçerli DataContext kullanılarak alınmayan bir nesne.
INSERT sırasında SubmitChanges bir veritabanına neden olur. |
ToBeUpdated |
Alındığından beri değiştirildiği bilinen bir nesne.
UPDATE sırasında SubmitChanges bir veritabanına neden olur. |
ToBeDeleted |
Silinmek üzere işaretlenen bir nesne, DELETE sırasında bir veritabanı hatasına SubmitChanges neden olur. |
Deleted |
Veritabanında silinmiş bir nesne. Bu durum sondur ve ek geçişlere izin vermez. |
Nesne Ekleme
Inserts kullanarak açıkça istekte bulunabilirsiniz InsertOnSubmit. Alternatif olarak, LINQ to SQL güncelleştirilmiş olması gereken bilinen nesnelerden birine bağlı nesneleri bularak çıkarım yapabilir Inserts . Örneğin, bir Untracked nesneyi bir EntitySet<TEntity> nesneye eklerseniz veya bir EntityRef<TEntity> nesneyi bir Untracked nesneye ayarlarsanız, Untracked nesnesini grafikteki izlenen nesneler yoluyla erişilebilir hale getirirsiniz. İşlem yapılırken SubmitChanges, LINQ to SQL izlenen nesneleri gezer ve izlenmeyen herhangi bir erişilebilir kalıcı nesneyi keşfeder. Bu tür nesneler veritabanına ekleme için adaylardır.
Devralma hiyerarşisindeki InsertOnSubmitsınıflar için (o), ayrıştırıcı olarak belirlenen üyenin değerini nesnesinin otürüyle eşleşecek şekilde de ayarlar. Varsayılan ayırıcı değeriyle eşleşen bir tür söz konusu olduğunda, bu eylem ayrımcı değerin üzerine varsayılan değerle yazılmasını sağlar. Daha fazla bilgi için bkz . Devralma Desteği.
Önemli
öğesine eklenen nesne Table kimlik önbelleğinde değil. Kimlik önbelleği yalnızca veritabanından alınanları yansıtır.
InsertOnSubmit çağrısından sonra, eklenen varlık SubmitChanges başarıyla tamamlanana kadar veritabanındaki sorgularda görünmez.
Nesneleri Silme
İzlenen bir nesneyi silinmek üzere işaretlemek için uygun o üzerinde DeleteOnSubmit(o) çağrısını yaparsınız. LINQ to SQL, bir nesnenin EntitySet<TEntity> 'den kaldırılmasını bir güncelleştirme işlemi olarak değerlendirir ve bunun sonucunda karşılık gelen yabancı anahtar değeri null olarak ayarlanır. İşlemin hedefi (o) tablosundan silinmez. Örneğin, cust.Orders.DeleteOnSubmit(ord)cust ile ord arasındaki ilişkinin ord.CustomerID yabancı anahtarını null olarak ayarlayarak kesildiği bir güncelleştirmeyi gösterir. Bu, ord öğeye karşılık gelen satırın silinmesine neden olmaz.
LINQ to SQL, bir nesne tablosundan silindiğinde (DeleteOnSubmit) aşağıdaki işlemleri gerçekleştirir:
Çağrıldığında SubmitChanges , bu nesne için bir
DELETEişlem gerçekleştirilir.Kaldırma işlemi, ilgili nesneler yüklü olup olmadığından bağımsız olarak yayılmaz. Özellikle, ilişki özelliğini güncelleştirmek için ilgili nesneler yüklenmez.
başarıyla yürütüldikten SubmitChangessonra nesneler duruma ayarlanır
Deleted. Sonuç olarak,idveya DataContext içindeki nesneyi kullanamazsınız. Bir DataContext örnek tarafından tutulan iç önbellek, veritabanındaki nesneler silindikten sonra bile yeni olarak alınan veya eklenen nesneleri ortadan kaldırmaz.
DeleteOnSubmit yalnızca DataContext tarafından izlenen bir nesnede çağırabilirsiniz. Bir Untracked nesnesi için, Attach öğesini çağırmadan önce DeleteOnSubmit öğesini çağırmalısınız.
DeleteOnSubmit fonksiyonunun bir Untracked nesnesi üzerinde çağrılması bir istisna fırlatır.
Uyarı
Tablodan bir nesnenin kaldırılması LINQ to SQL'e, zamanında karşılık gelen bir SQL DELETE komutu oluşturmasını SubmitChangessöyler. Bu eylem nesneyi önbellekten kaldırmaz veya silme işlemini ilgili nesnelere yaymaz.
Silinen bir nesnenin id geri kazanmak için yeni DataContext bir örnek kullanın. İlgili nesneleri temizlemek için veritabanının art arda silme özelliğini kullanabilir veya ilgili nesneleri el ile silebilirsiniz.
İlgili nesnelerin herhangi bir özel sırada silinmesi gerekmez (veritabanından farklı olarak).
Nesneleri Güncelleştirme
Değişikliklerin bildirimlerini gözlemleyerek algılayabilirsiniz Updates . Bildirimler, özellik ayarlayıcıları aracılığıyla PropertyChanging olayında sağlanır. LINQ to SQL bir nesneye yapılan ilk değişiklik bildirildiğinde, nesnenin bir kopyasını oluşturur ve nesneyi deyim Update oluşturmak için bir aday olarak kabul eder.
uygulamayan INotifyPropertyChangingnesneler için LINQ to SQL, nesnelerin ilk gerçekleştirildiğinde sahip olduğu değerlerin bir kopyasını tutar. çağırdığınızda SubmitChanges, LINQ to SQL geçerli ve özgün değerleri karşılaştırarak nesnenin değiştirilip değiştirilmediğine karar verir.
İlişkilerde yapılan güncelleştirmeler için, alt öğeden üst öğeye (yani yabancı anahtara karşılık gelen başvuru) yapılan başvuru yetkili olarak kabul edilir. Ters yöndeki başvuru (üst öğeden alt öğeye) isteğe bağlıdır. İlişki sınıfları (EntitySet<TEntity> ve EntityRef<TEntity>) çift yönlü başvuruların bire çok ve bire bir ilişkiler için tutarlı olmasını garanti eder. Nesne modeli EntitySet<TEntity> veya EntityRef<TEntity> kullanmıyorsa ve bir ters başvuru mevcutsa, ilişki güncellendiğinde ileriye doğru başvuruyla tutarlı kalmasını sağlamak sizin sorumluluğunuzdadır.
Gerekli referansı ve ilgili yabancı anahtarı güncelleştirirseniz, uyumlu olduklarından emin olmalısınız. InvalidOperationException çağrısını yaptığınızda, eğer ikisi de eşitlenmemişse SubmitChanges istisnası atılır. Yabancı anahtar değerindeki değişiklikler temel satırı güncellemek için yeterli olsa da, nesne grafiğinin bağlantısını ve ilişkilerin iki yönlü tutarlılığını sağlamak için referansı değiştirmeniz gerekir.