DatabaseBeginTransaction เทียบกับ Transaction.TransactionScope


90

อะไรคือความแตกต่างระหว่างSystem.Transactions.TransactionScopeEF6 Database.BeginTransaction?

ใครช่วยยกตัวอย่างเล็กน้อยหรือแค่อธิบายว่าควรใช้อันไหนเมื่อมีความแตกต่างที่ชัดเจน

PS: ในโครงการของฉันฉันใช้ EF6 ฉันได้อ่านเอกสารแล้ว แต่ก็ไม่ได้ช่วยอะไรมาก ค้นหาตัวอย่างด้วย แต่ค่อนข้างใช้SqlConnection.BeginTransactionและตอนนี้ MS ได้เปิดตัวสิ่งใหม่นี้Database.BeginTransactionใน EF6

คำตอบ:


98

ฉันพบคำตอบในเอกสารประกอบของ Entity Framework 6:

ด้วยการเปิดตัว EF6 Microsoft แนะนำให้ใช้วิธีการ API ใหม่: Database.BeginTransaction()และDatabase.UseTransaction(). แม้ว่าSystem.Transactions.TransactionScopeจะยังคงได้รับการสนับสนุนเป็นอย่างดี แต่ก็ไม่จำเป็นสำหรับผู้ใช้ EF6 ส่วนใหญ่อีกต่อไป

แม้ว่าDatabase.BeginTransaction()จะใช้สำหรับธุรกรรมการดำเนินการที่เกี่ยวข้องกับฐานข้อมูลเท่านั้นSystem.Transactions.TransactionScopeนอกจากนั้นยังทำให้ 'รหัส C # ธรรมดา' สามารถทำธุรกรรมได้ด้วย

ดังนั้นใช้ในDatabase.BeginTransaction()กรณีที่เคยทำเฉพาะการดำเนินการที่เกี่ยวข้องกับ db ในธุรกรรมใน EF6 หรือใช้System.Transactions.TransactionScopeสำหรับการผสมการดำเนินการ db และรหัส C # เข้าด้วยกันในธุรกรรม

สำหรับผู้ที่ยังคงชอบTransactionScopeแนวทางนี้ขอแนะนำให้ตรวจสอบข้อ จำกัด โดยเฉพาะอย่างยิ่งในสถานการณ์ระบบคลาวด์ (สถานการณ์ระบบคลาวด์ไม่รองรับธุรกรรมแบบกระจาย)

สามารถดูข้อมูลเพิ่มเติมได้ที่นี่


11
น่าเสียดายที่คุณไม่สามารถซ้อนธุรกรรมกับ DatabaseBeginTransaction ได้ในขณะที่คุณสามารถทำได้ด้วย TransactionScope
Triynko

8
'' รหัส C # ธรรมดา 'เป็นธุรกรรม' หมายความว่าอย่างไร?
เจอราร์ด

@Gerard ฉันคิดว่ามันหมายความว่าถ้าคุณดำเนินการ SQL นอก EF (เช่นการใช้ ADO.NET) การดำเนินการเหล่านั้นจะเกิดขึ้นภายใต้ธุรกรรมเดียวกัน
Rudey
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.