2015-12-21 16 views
16

Entity Framework 7'de açık bir işlemin nasıl oluşturulacağını bilen var mı? Bulduğum tüm bilgiler EF sürüm 6'ya atıfta bulunuyor. Dokümantasyon da çok eksiktir, bu yüzden herkes buna bir örnek verebilir mi?Entity Framework 7'de açık işlem 7

Bir dbContext'im var ve bir nesneyi ve ilgili nesneleri silmem ve sonra yeniden eklemem gerekiyor, ancak aynı işlemde, satırların her zaman "sürümüne" sahip olacağım.

+0

İşlemi kullanmak istediğiniz yere küçük kod parçası ekleyebilirsiniz mi? Bazı "dbContext" veya "DbCommand" var mı? Tipik olarak, '(context.Database.BeginTransaction()) {…/* birşeyler yapmalısınız */...} ', ancak' 'use context.Database.BeginTransactionAsync()' komutunu kullanabilirsiniz. Kullanarak (var transaction = context.Database.BeginTransaction()) {...} 'kullanabilir ve işlemi gerçekleştirmek için“ transaction.Commit() ”i çağırır ya da geri alma için' transaction.Rollback() 'yi çağırır. Daha egzotik [EnlistTransaction] var (https://msdn.microsoft.com/en-us/library/ms254973 (v = vs.110) .aspx). – Oleg

+0

Çok egzotik değil ... henüz ;-) Yani baytlar EF6'dan farklı mı? Sonra bir şey özledim. Bir dbContext'im var ve bir varlığı ve ilgili nesneleri silmeli ve sonra yeniden eklemeliyim. – Vi100

+0

Tamam, kodunuz çalışıyor, ancak EF6 ile aynı. Soruyu silersem veya düzenlemeyi tercih edip yorumunuzu yanıt olarak gönderir miyim? – Vi100

cevap

14

İşlem işlevi, yalnızca RC1 ile başlayan EF7'ye dahil edilmiştir (bkz. the statement). .SaveChanges() (veya .SaveChangesAsync()) numaralı telefonun araması otomatik işlemi kullanmalıdır. Daha sonra, örneğin, varlıkların bazı öğelerinin durumunun daha önce Silindi olarak işaretlenmesi gerektiğini varsayalım.

Bir

using (context.Database.BeginTransaction()) { 
    /*do something*/ 
} 

işlem using blok sonunda .Dispose() çağrısına işlediği edilecektir iç veritabanı üzerinde manipülasyon biraz parçasını sararak hareketleri doğrudan başlayabilirler. Birisi alternatif olarak, Entity Framework'ün önceki sürümlerinde olduğu gibi genel olarak kullanılmalıdır. Örneğin, the post.

+0

Bu RC-1 finalinde değil, DatabaseFacade'ın daha yeni bir sürümüne ihtiyaç duyar. – user764754

+0

@ user764754: Bunu doğruladınız mı? Örneğin RC1'de bulunan [test] bölümüne bakın (https://github.com/aspnet/EntityFramework/blob/7.0.0-rc1/test/EntityFramework.Relational.FunctionalTests/TransactionTestBase.cs#L62). BeginTransaction() ' – Oleg

+0

'u kullanır RC-1'de EntityFramework.Relational'da bir uzantı yöntemidir. Daha sonra EntityFramework.Core içinde DatabaseFacade ile. Sadece çekirdek RC-1'e başvuruyorum, bu yüzden bulamadım. – user764754