Bagikan melalui


DatabaseFacade Kelas

Definisi

Menyediakan akses ke informasi dan operasi terkait database untuk konteks. Instans kelas ini biasanya diperoleh dari Database dan tidak dirancang untuk secara langsung dibangun dalam kode aplikasi Anda.

public class DatabaseFacade : Microsoft.EntityFrameworkCore.Infrastructure.IInfrastructure<IServiceProvider>
public class DatabaseFacade : Microsoft.EntityFrameworkCore.Infrastructure.IInfrastructure<IServiceProvider>, Microsoft.EntityFrameworkCore.Internal.IDatabaseFacadeDependenciesAccessor
public class DatabaseFacade : Microsoft.EntityFrameworkCore.Infrastructure.IInfrastructure<IServiceProvider>, Microsoft.EntityFrameworkCore.Storage.IDatabaseFacadeDependenciesAccessor
public class DatabaseFacade : Microsoft.EntityFrameworkCore.Infrastructure.IInfrastructure<IServiceProvider>, Microsoft.EntityFrameworkCore.Infrastructure.IResettableService, Microsoft.EntityFrameworkCore.Storage.IDatabaseFacadeDependenciesAccessor
type DatabaseFacade = class
    interface IInfrastructure<IServiceProvider>
type DatabaseFacade = class
    interface IInfrastructure<IServiceProvider>
    interface IDatabaseFacadeDependenciesAccessor
type DatabaseFacade = class
    interface IInfrastructure<IServiceProvider>
    interface IDatabaseFacadeDependenciesAccessor
    interface IResettableService
Public Class DatabaseFacade
Implements IInfrastructure(Of IServiceProvider)
Public Class DatabaseFacade
Implements IDatabaseFacadeDependenciesAccessor, IInfrastructure(Of IServiceProvider)
Public Class DatabaseFacade
Implements IDatabaseFacadeDependenciesAccessor, IInfrastructure(Of IServiceProvider), IResettableService
Warisan
DatabaseFacade
Penerapan
IInfrastructure<IServiceProvider> Microsoft.EntityFrameworkCore.Internal.IDatabaseFacadeDependenciesAccessor IDatabaseFacadeDependenciesAccessor IResettableService

Konstruktor

DatabaseFacade(DbContext)

Menginisialisasi instans baru kelas DatabaseFacade. Instans kelas ini biasanya diperoleh dari Database dan tidak dirancang untuk secara langsung dibangun dalam kode aplikasi Anda.

Properti

AutoSavepointsEnabled

Apakah titik simpan transaksi akan dibuat secara otomatis dengan SaveChanges() jika dipanggil setelah transaksi dimulai secara manual dengan BeginTransaction().

AutoTransactionBehavior

Mendapatkan atau menetapkan nilai yang menunjukkan apakah transaksi akan dibuat secara otomatis SaveChanges() oleh jika tidak ada 'BeginTransaction' atau 'UseTransaction' yang telah dipanggil.

AutoTransactionsEnabled
Kedaluwarsa..
Kedaluwarsa..

Mendapatkan atau menetapkan nilai yang menunjukkan apakah transaksi akan dibuat secara otomatis SaveChanges() atau tidak jika tidak ada metode 'BeginTransaction' atau 'UseTransaction' yang telah dipanggil.

CurrentTransaction

Mendapatkan saat ini IDbContextTransaction yang digunakan oleh konteks, atau null jika tidak ada transaksi yang digunakan.

ProviderName

Mengembalikan nama penyedia database yang saat ini sedang digunakan. Nama biasanya adalah nama rakitan penyedia. Biasanya lebih mudah menggunakan metode gula seperti Microsoft.EntityFrameworkCore.SqlServerDatabaseFacadeExtensions.IsSqlServer alih-alih memanggil metode ini secara langsung.

Metode

BeginTransaction()

Memulai transaksi baru.

BeginTransactionAsync(CancellationToken)

Secara asinkron memulai transaksi baru.

CanConnect()

Menentukan apakah database tersedia atau tidak dan dapat disambungkan.

CanConnectAsync(CancellationToken)

Menentukan apakah database tersedia atau tidak dan dapat disambungkan.

CommitTransaction()

Menerapkan operasi terutang dalam transaksi saat ini ke database.

CommitTransactionAsync(CancellationToken)

Menerapkan operasi terutang dalam transaksi saat ini ke database.

CreateExecutionStrategy()

Membuat instans dari yang dikonfigurasi IExecutionStrategy.

EnsureCreated()

Memastikan bahwa database untuk konteks ada.

EnsureCreatedAsync(CancellationToken)

Memastikan bahwa database untuk konteks ada.

EnsureDeleted()

Memastikan bahwa database untuk konteks tidak ada. Jika tidak ada, tidak ada tindakan yang diambil. Jika memang ada, database akan dihapus.

Peringatan: Seluruh database dihapus, dan tidak ada upaya yang dilakukan untuk menghapus hanya objek database yang digunakan oleh model untuk konteks ini.

EnsureDeletedAsync(CancellationToken)

Secara asinkron memastikan bahwa database untuk konteks tidak ada. Jika tidak ada, tidak ada tindakan yang diambil. Jika memang ada, database akan dihapus.

Peringatan: Seluruh database dihapus, dan tidak ada upaya yang dilakukan untuk menghapus hanya objek database yang digunakan oleh model untuk konteks ini.

RollbackTransaction()

Membuang operasi yang terutang dalam transaksi saat ini.

RollbackTransactionAsync(CancellationToken)

Membuang operasi yang terutang dalam transaksi saat ini.

Implementasi Antarmuka Eksplisit

IDatabaseFacadeDependenciesAccessor.Context

Ini adalah API internal yang mendukung infrastruktur Entity Framework Core dan tidak tunduk pada standar kompatibilitas yang sama dengan API publik. Ini dapat diubah atau dihapus tanpa pemberitahuan dalam rilis apa pun. Anda hanya boleh menggunakannya langsung dalam kode Anda dengan sangat hati-hati dan mengetahui bahwa melakukannya dapat mengakibatkan kegagalan aplikasi saat memperbarui ke rilis Entity Framework Core baru.

IDatabaseFacadeDependenciesAccessor.Dependencies

Ini adalah API internal yang mendukung infrastruktur Entity Framework Core dan tidak tunduk pada standar kompatibilitas yang sama dengan API publik. Ini dapat diubah atau dihapus tanpa pemberitahuan dalam rilis apa pun. Anda hanya boleh menggunakannya langsung dalam kode Anda dengan sangat hati-hati dan mengetahui bahwa melakukannya dapat mengakibatkan kegagalan aplikasi saat memperbarui ke rilis Entity Framework Core baru.

IInfrastructure<IServiceProvider>.Instance

Mendapatkan cakupan IServiceProvider yang digunakan untuk menyelesaikan layanan.

Properti ini ditujukan untuk digunakan oleh metode ekstensi yang perlu memanfaatkan layanan yang tidak secara langsung terekspos di permukaan API publik.

IResettableService.ResetState()

Mengatur ulang layanan sehingga dapat digunakan dari kumpulan.

IResettableService.ResetStateAsync(CancellationToken)

Menyediakan akses ke informasi dan operasi terkait database untuk konteks. Instans kelas ini biasanya diperoleh dari Database dan tidak dirancang untuk secara langsung dibangun dalam kode aplikasi Anda.

Metode Ekstensi

GetCosmosClient(DatabaseFacade)

Mendapatkan yang mendasar CosmosClient untuk ini DbContext.

GetCosmosDatabaseId(DatabaseFacade)

Mendapatkan nama database yang dikonfigurasi untuk ini DbContext.

IsCosmos(DatabaseFacade)

Mengembalikan true jika penyedia database yang saat ini digunakan adalah penyedia Cosmos.

GetInfrastructure<T>(IInfrastructure<T>)

Mendapatkan nilai dari properti yang sedang disembunyikan menggunakan IInfrastructure<T>.

Metode ini biasanya digunakan oleh penyedia database (dan ekstensi lainnya). Umumnya tidak digunakan dalam kode aplikasi.

IsInMemory(DatabaseFacade)

Mengembalikan true jika penyedia database yang saat ini digunakan adalah penyedia dalam memori.

BeginTransaction(DatabaseFacade, IsolationLevel)

Memulai transaksi baru dengan .IsolationLevel

BeginTransactionAsync(DatabaseFacade, IsolationLevel, CancellationToken)

Secara asinkron memulai transaksi baru dengan yang diberikan IsolationLevel.

CloseConnection(DatabaseFacade)

Menutup yang mendasar DbConnection.

CloseConnectionAsync(DatabaseFacade)

Menutup yang mendasar DbConnection.

ExecuteSql(DatabaseFacade, FormattableString)

Menjalankan SQL yang diberikan terhadap database dan mengembalikan jumlah baris yang terpengaruh.

ExecuteSqlAsync(DatabaseFacade, FormattableString, CancellationToken)

Menjalankan SQL yang diberikan terhadap database dan mengembalikan jumlah baris yang terpengaruh.

ExecuteSqlCommand(DatabaseFacade, RawSqlString, IEnumerable<Object>)
Kedaluwarsa..

Menjalankan SQL yang diberikan terhadap database dan mengembalikan jumlah baris yang terpengaruh.

Perhatikan bahwa metode ini tidak memulai transaksi. Untuk menggunakan metode ini dengan transaksi, pertama-tama panggil BeginTransaction(DatabaseFacade, IsolationLevel) atau UseTransaction(DatabaseFacade, DbTransaction).

Perhatikan bahwa saat ini ExecutionStrategy tidak digunakan oleh metode ini karena SQL mungkin tidak idempotensi dan tidak berjalan dalam transaksi. ExecutionStrategy dapat digunakan secara eksplisit, memastikan untuk juga menggunakan transaksi jika SQL tidak idempotensi.

Seperti halnya API apa pun yang menerima SQL, penting untuk membuat parameter input pengguna apa pun untuk melindungi dari serangan injeksi SQL. Anda dapat menyertakan tempat penampung parameter dalam string kueri SQL lalu menyediakan nilai parameter sebagai argumen tambahan. Nilai parameter apa pun yang Anda berikan akan secara otomatis dikonversi ke DbParameter. Anda juga dapat mempertimbangkan untuk menggunakan ExecuteSqlInterpolated untuk menggunakan sintaks string terinterpolasi untuk membuat parameter.

ExecuteSqlCommand(DatabaseFacade, RawSqlString, Object[])
Kedaluwarsa..

Menjalankan SQL yang diberikan terhadap database dan mengembalikan jumlah baris yang terpengaruh.

Perhatikan bahwa metode ini tidak memulai transaksi. Untuk menggunakan metode ini dengan transaksi, pertama-tama panggil BeginTransaction(DatabaseFacade, IsolationLevel) atau UseTransaction(DatabaseFacade, DbTransaction).

Perhatikan bahwa saat ini ExecutionStrategy tidak digunakan oleh metode ini karena SQL mungkin tidak idempotensi dan tidak berjalan dalam transaksi. ExecutionStrategy dapat digunakan secara eksplisit, memastikan untuk juga menggunakan transaksi jika SQL tidak idempotensi.

Seperti halnya API apa pun yang menerima SQL, penting untuk membuat parameter input pengguna apa pun untuk melindungi dari serangan injeksi SQL. Anda dapat menyertakan tempat penampung parameter dalam string kueri SQL lalu menyediakan nilai parameter sebagai argumen tambahan. Nilai parameter apa pun yang Anda berikan akan secara otomatis dikonversi ke DbParameter - context.Database.ExecuteSqlCommand("SELECT * FROM [dbo].[SearchBlogs]({0})", userSuppliedSearchTerm). Anda juga dapat mempertimbangkan untuk menggunakan ExecuteSqlInterpolated untuk menggunakan sintaks string terinterpolasi untuk membuat parameter.

ExecuteSqlCommand(DatabaseFacade, FormattableString)
Kedaluwarsa..

Menjalankan SQL yang diberikan terhadap database dan mengembalikan jumlah baris yang terpengaruh.

Perhatikan bahwa metode ini tidak memulai transaksi. Untuk menggunakan metode ini dengan transaksi, pertama-tama panggil BeginTransaction(DatabaseFacade, IsolationLevel) atau UseTransaction(DatabaseFacade, DbTransaction).

Perhatikan bahwa saat ini ExecutionStrategy tidak digunakan oleh metode ini karena SQL mungkin tidak idempotensi dan tidak berjalan dalam transaksi. ExecutionStrategy dapat digunakan secara eksplisit, memastikan untuk juga menggunakan transaksi jika SQL tidak idempotensi.

Seperti halnya API apa pun yang menerima SQL, penting untuk membuat parameter input pengguna apa pun untuk melindungi dari serangan injeksi SQL. Anda dapat menyertakan tempat penampung parameter dalam string kueri SQL lalu menyediakan nilai parameter sebagai argumen tambahan. Nilai parameter apa pun yang Anda berikan akan secara otomatis dikonversi ke DbParameter - context.Database.ExecuteSqlCommand($"SELECT * FROM [dbo].[SearchBlogs]({userSuppliedSearchTerm})").

ExecuteSqlCommand(DatabaseFacade, String, Object[])

Menyediakan akses ke informasi dan operasi terkait database untuk konteks. Instans kelas ini biasanya diperoleh dari Database dan tidak dirancang untuk secara langsung dibangun dalam kode aplikasi Anda.

ExecuteSqlCommandAsync(DatabaseFacade, RawSqlString, IEnumerable<Object>, CancellationToken)
Kedaluwarsa..

Menjalankan SQL yang diberikan terhadap database dan mengembalikan jumlah baris yang terpengaruh.

Perhatikan bahwa metode ini tidak memulai transaksi. Untuk menggunakan metode ini dengan transaksi, pertama-tama panggil BeginTransaction(DatabaseFacade, IsolationLevel) atau UseTransaction(DatabaseFacade, DbTransaction).

Perhatikan bahwa saat ini ExecutionStrategy tidak digunakan oleh metode ini karena SQL mungkin tidak idempotensi dan tidak berjalan dalam transaksi. ExecutionStrategy dapat digunakan secara eksplisit, memastikan untuk juga menggunakan transaksi jika SQL tidak idempotensi.

Seperti halnya API apa pun yang menerima SQL, penting untuk membuat parameter input pengguna apa pun untuk melindungi dari serangan injeksi SQL. Anda dapat menyertakan tempat penampung parameter dalam string kueri SQL lalu menyediakan nilai parameter sebagai argumen tambahan. Nilai parameter apa pun yang Anda berikan akan secara otomatis dikonversi ke DbParameter. Anda juga dapat mempertimbangkan untuk menggunakan ExecuteSqlInterpolated untuk menggunakan sintaks string terinterpolasi untuk membuat parameter.

ExecuteSqlCommandAsync(DatabaseFacade, RawSqlString, Object[])
Kedaluwarsa..

Menjalankan SQL yang diberikan terhadap database dan mengembalikan jumlah baris yang terpengaruh.

Perhatikan bahwa metode ini tidak memulai transaksi. Untuk menggunakan metode ini dengan transaksi, pertama-tama panggil BeginTransaction(DatabaseFacade, IsolationLevel) atau UseTransaction(DatabaseFacade, DbTransaction).

Perhatikan bahwa saat ini ExecutionStrategy tidak digunakan oleh metode ini karena SQL mungkin tidak idempotensi dan tidak berjalan dalam transaksi. ExecutionStrategy dapat digunakan secara eksplisit, memastikan untuk juga menggunakan transaksi jika SQL tidak idempotensi.

Seperti halnya API apa pun yang menerima SQL, penting untuk membuat parameter input pengguna apa pun untuk melindungi dari serangan injeksi SQL. Anda dapat menyertakan tempat penampung parameter dalam string kueri SQL lalu menyediakan nilai parameter sebagai argumen tambahan. Nilai parameter apa pun yang Anda berikan akan secara otomatis dikonversi ke DbParameter - context.Database.ExecuteSqlCommandAsync("SELECT * FROM [dbo].[SearchBlogs]({0})", userSuppliedSearchTerm). Anda juga dapat mempertimbangkan untuk menggunakan ExecuteSqlInterpolated untuk menggunakan sintaks string terinterpolasi untuk membuat parameter.

ExecuteSqlCommandAsync(DatabaseFacade, RawSqlString, CancellationToken)
Kedaluwarsa..

Menjalankan SQL yang diberikan terhadap database dan mengembalikan jumlah baris yang terpengaruh.

Perhatikan bahwa metode ini tidak memulai transaksi. Untuk menggunakan metode ini dengan transaksi, pertama-tama panggil BeginTransaction(DatabaseFacade, IsolationLevel) atau UseTransaction(DatabaseFacade, DbTransaction).

Perhatikan bahwa saat ini ExecutionStrategy tidak digunakan oleh metode ini karena SQL mungkin tidak idempotensi dan tidak berjalan dalam transaksi. ExecutionStrategy dapat digunakan secara eksplisit, memastikan juga untuk menggunakan transaksi jika SQL tidak idempotensi.

Seperti halnya API apa pun yang menerima SQL, penting untuk membuat parameter input pengguna apa pun untuk melindungi dari serangan injeksi SQL. Anda dapat menyertakan tempat penampung parameter dalam string kueri SQL lalu menyediakan nilai parameter sebagai argumen tambahan. Nilai parameter apa pun yang Anda berikan akan secara otomatis dikonversi ke DbParameter - context.Database.ExecuteSqlCommandAsync("SELECT * FROM [dbo].[SearchBlogs]({0})", userSuppliedSearchTerm).

ExecuteSqlCommandAsync(DatabaseFacade, FormattableString, CancellationToken)
Kedaluwarsa..

Menjalankan SQL yang diberikan terhadap database dan mengembalikan jumlah baris yang terpengaruh.

Perhatikan bahwa metode ini tidak memulai transaksi. Untuk menggunakan metode ini dengan transaksi, pertama-tama panggil BeginTransaction(DatabaseFacade, IsolationLevel) atau UseTransaction(DatabaseFacade, DbTransaction).

Perhatikan bahwa saat ini ExecutionStrategy tidak digunakan oleh metode ini karena SQL mungkin tidak idempotensi dan tidak berjalan dalam transaksi. ExecutionStrategy dapat digunakan secara eksplisit, memastikan juga untuk menggunakan transaksi jika SQL tidak idempotensi.

Seperti halnya API apa pun yang menerima SQL, penting untuk membuat parameter input pengguna apa pun untuk melindungi dari serangan injeksi SQL. Anda dapat menyertakan tempat penampung parameter dalam string kueri SQL lalu menyediakan nilai parameter sebagai argumen tambahan. Nilai parameter apa pun yang Anda berikan akan secara otomatis dikonversi ke DbParameter - context.Database.ExecuteSqlCommandAsync($"SELECT * FROM [dbo].[SearchBlogs]({userSuppliedSearchTerm})").

ExecuteSqlCommandAsync(DatabaseFacade, String, CancellationToken, Object[])

Menyediakan akses ke informasi dan operasi terkait database untuk konteks. Instans kelas ini biasanya diperoleh dari Database dan tidak dirancang untuk secara langsung dibangun dalam kode aplikasi Anda.

ExecuteSqlInterpolated(DatabaseFacade, FormattableString)

Menjalankan SQL yang diberikan terhadap database dan mengembalikan jumlah baris yang terpengaruh.

ExecuteSqlInterpolatedAsync(DatabaseFacade, FormattableString, CancellationToken)

Menjalankan SQL yang diberikan terhadap database dan mengembalikan jumlah baris yang terpengaruh.

ExecuteSqlRaw(DatabaseFacade, String, IEnumerable<Object>)

Menjalankan SQL yang diberikan terhadap database dan mengembalikan jumlah baris yang terpengaruh.

ExecuteSqlRaw(DatabaseFacade, String, Object[])

Menjalankan SQL yang diberikan terhadap database dan mengembalikan jumlah baris yang terpengaruh.

ExecuteSqlRawAsync(DatabaseFacade, String, IEnumerable<Object>, CancellationToken)

Menjalankan SQL yang diberikan terhadap database dan mengembalikan jumlah baris yang terpengaruh.

ExecuteSqlRawAsync(DatabaseFacade, String, Object[])

Menjalankan SQL yang diberikan terhadap database dan mengembalikan jumlah baris yang terpengaruh.

ExecuteSqlRawAsync(DatabaseFacade, String, CancellationToken)

Menjalankan SQL yang diberikan terhadap database dan mengembalikan jumlah baris yang terpengaruh.

GenerateCreateScript(DatabaseFacade)

Menghasilkan skrip untuk membuat semua tabel untuk model saat ini.

GetAppliedMigrations(DatabaseFacade)

Mendapatkan semua migrasi yang telah diterapkan ke database target.

GetAppliedMigrationsAsync(DatabaseFacade, CancellationToken)

Secara asinkron mendapatkan semua migrasi yang telah diterapkan ke database target.

GetCommandTimeout(DatabaseFacade)

Mengembalikan batas waktu (dalam detik) yang ditetapkan untuk perintah yang dijalankan dengan ini DbContext.

GetConnectionString(DatabaseFacade)

Mendapatkan string koneksi yang mendasar yang dikonfigurasi untuk iniDbContext.

GetDbConnection(DatabaseFacade)

Mendapatkan ADO.NET DbConnection yang mendasar untuk ini DbContext.

GetMigrations(DatabaseFacade)

Mendapatkan semua migrasi yang ditentukan dalam rakitan migrasi yang dikonfigurasi.

GetPendingMigrations(DatabaseFacade)

Mendapatkan semua migrasi yang ditentukan dalam perakitan tetapi belum diterapkan ke database target.

GetPendingMigrationsAsync(DatabaseFacade, CancellationToken)

Secara asinkron mendapatkan semua migrasi yang ditentukan dalam perakitan tetapi belum diterapkan ke database target.

HasPendingModelChanges(DatabaseFacade)

Mengembalikan true jika model memiliki perubahan tertunda yang akan diterapkan.

IsRelational(DatabaseFacade)

Mengembalikan true jika penyedia database yang saat ini digunakan adalah database relasional.

Migrate(DatabaseFacade)

Menerapkan migrasi yang tertunda untuk konteks ke database. Akan membuat database jika belum ada.

MigrateAsync(DatabaseFacade, CancellationToken)

Secara asinkron menerapkan migrasi yang tertunda untuk konteks ke database. Akan membuat database jika belum ada.

OpenConnection(DatabaseFacade)

Membuka yang mendasar DbConnection.

OpenConnectionAsync(DatabaseFacade, CancellationToken)

Membuka yang mendasar DbConnection.

SetCommandTimeout(DatabaseFacade, Nullable<Int32>)

Mengatur batas waktu (dalam detik) yang akan digunakan untuk perintah yang dijalankan dengan ini DbContext.

SetCommandTimeout(DatabaseFacade, TimeSpan)

Mengatur batas waktu yang akan digunakan untuk perintah yang dijalankan dengan ini DbContext.

SetConnectionString(DatabaseFacade, String)

Mengatur string koneksi yang mendasar yang dikonfigurasi untuk iniDbContext.

SetDbConnection(DatabaseFacade, DbConnection)

Mengatur ADO.NET DbConnection yang mendasar untuk ini DbContext.

SetDbConnection(DatabaseFacade, DbConnection, Boolean)

Mengatur ADO.NET DbConnection yang mendasar untuk ini DbContext.

SqlQuery<TResult>(DatabaseFacade, FormattableString)

Membuat kueri LINQ berdasarkan kueri SQL mentah, yang mengembalikan kumpulan hasil jenis skalar yang didukung secara asli oleh penyedia database.

SqlQueryRaw<TResult>(DatabaseFacade, String, Object[])

Membuat kueri LINQ berdasarkan kueri SQL mentah, yang mengembalikan kumpulan hasil jenis skalar yang didukung secara asli oleh penyedia database.

UseTransaction(DatabaseFacade, DbTransaction)

Mengatur yang DbTransaction akan digunakan oleh operasi database pada DbContext.

UseTransaction(DatabaseFacade, DbTransaction, Guid)

Mengatur yang DbTransaction akan digunakan oleh operasi database pada DbContext.

UseTransactionAsync(DatabaseFacade, DbTransaction, Guid, CancellationToken)

Mengatur yang DbTransaction akan digunakan oleh operasi database pada DbContext.

UseTransactionAsync(DatabaseFacade, DbTransaction, CancellationToken)

Mengatur yang DbTransaction akan digunakan oleh operasi database pada DbContext.

IsSqlite(DatabaseFacade)

Mengembalikan true jika penyedia database yang saat ini digunakan adalah penyedia SQLite.

IsSqlServer(DatabaseFacade)

Mengembalikan true jika penyedia database yang saat ini digunakan adalah penyedia SQL Server.

EnlistTransaction(DatabaseFacade, Transaction)

Menentukan yang sudah ada Transaction untuk digunakan untuk operasi database.

GetEnlistedTransaction(DatabaseFacade)

Mengembalikan transaksi yang saat ini terdaftar.

Berlaku untuk