Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Penguncian optimis menggunakan DynamoDB dan model persistensi objek AWS SDK for .NET
Dukungan penguncian optimis dalam model persistensi objek memastikan bahwa versi item untuk aplikasi Anda sama dengan versi item di sisi server sebelum memperbarui atau menghapus item. Misalkan Anda mengambil item untuk pembaruan. Namun, sebelum Anda mengirimkan pembaruan Anda kembali, beberapa aplikasi lain memperbarui item yang sama. Sekarang aplikasi Anda memiliki salinan item yang sudah usang. Tanpa penguncian optimis, setiap pembaruan yang Anda lakukan akan menimpa pembaruan yang dibuat oleh aplikasi lain.
Fitur penguncian optimis model persistensi objek menyediakan tanda DynamoDBVersion
yang dapat Anda gunakan untuk mengaktifkan penguncian optimis. Untuk menggunakan fitur ini, Anda menambahkan properti ke kelas Anda untuk menyimpan nomor versi. Anda menambahkan atribut DynamoDBVersion
untuk properti. Ketika Anda pertama kali menyimpan objek, DynamoDBContext
menetapkan nomor versi dan menambah nilai ini setiap kali Anda memperbarui item.
Permintaan perbarui atau hapus Anda akan berhasil hanya jika versi objek sisi kliennya cocok dengan nomor versi item yang sesuai di sisi server. Jika aplikasi Anda memiliki salinan yang sudah usang, aplikasi tersebut harus mendapatkan versi terbaru dari server sebelum dapat memperbarui atau menghapus item.
Contoh kode C# berikut mendefinisikan kelas Book
dengan atribut persistensi objek yang memetakannya ke tabel ProductCatalog
. Properti VersionNumber
di kelas yang dilengkapi dengan atribut DynamoDBVersion
menyimpan nilai nomor versi.
contoh
[DynamoDBTable("ProductCatalog")] public class Book { [DynamoDBHashKey] //Partition key public int Id { get; set; } [DynamoDBProperty] public string Title { get; set; } [DynamoDBProperty] public string ISBN { get; set; } [DynamoDBProperty("Authors")] public List<string> BookAuthors { get; set; } [DynamoDBVersion] public int? VersionNumber { get; set; } }
catatan
Anda dapat menerapkan atribut DynamoDBVersion
hanya untuk jenis primitif numerik yang dapat di-null-kan (seperti int?
).
Penguncian optimis memiliki dampak berikut terhadap operasi DynamoDBContext
:
-
Untuk item baru,
DynamoDBContext
menetapkan nomor versi awal 0. Jika Anda mengambil item yang ada, memperbarui satu atau beberapa properti, dan mencoba untuk menyimpan perubahan, operasi simpan hanya akan berhasil jika nomor versi di sisi klien dan sisi server cocok.DynamoDBContext
menambahkan nomor versi. Anda tidak perlu mengatur nomor versi. -
Metode
Delete
menyediakan beban berlebih yang dapat mengambil nilai kunci primer atau objek sebagai parameter, seperti yang ditunjukkan dalam contoh kode C# berikut.contoh
DynamoDBContext context = new DynamoDBContext(client); ... // Load a book. Book book = context.Load<ProductCatalog>(111); // Do other operations. // Delete 1 - Pass in the book object. context.Delete<ProductCatalog>(book); // Delete 2 - Pass in the Id (primary key) context.Delete<ProductCatalog>(222);
Jika Anda menyediakan objek sebagai parameter, penghapusan berhasil hanya jika versi objek cocok dengan versi item sisi server yang sesuai. Namun, jika Anda memberikan nilai kunci primer sebagai parameter,
DynamoDBContext
tidak mengenali nomor versi apa pun, dan menghapus item tanpa melakukan pemeriksaan versi.Perhatikan bahwa implementasi internal penguncian optimis dalam kode model persistensi objek menggunakan pembaruan bersyarat dan tindakan API penghapusan bersyarat di DynamoDB.
Menonaktifkan penguncian optimis
Untuk menonaktifkan penguncian optimis, gunakan properti konfigurasi SkipVersionCheck
. Anda dapat mengatur properti ini saat membuat DynamoDBContext
. Dalam kasus ini, penguncian optimis dinonaktifkan untuk permintaan apa pun yang Anda buat menggunakan konteks. Untuk informasi selengkapnya, lihat Menentukan parameter opsional untuk D ynamoDBContext .
Alih-alih menetapkan properti pada tingkat konteks, Anda dapat menonaktifkan penguncian optimis untuk operasi tertentu, seperti yang ditunjukkan dalam contoh kode C# berikut. Contoh ini menggunakan konteks untuk menghapus item buku. Metode Delete
menetapkan properti SkipVersionCheck
opsional ke true, menonaktifkan pemeriksaan penentuan versi.
contoh
DynamoDBContext context = new DynamoDBContext(client); // Load a book. Book book = context.Load<ProductCatalog>(111); ... // Delete the book. context.Delete<Book>(book, new DynamoDBContextConfig { SkipVersionCheck = true });