Tôi cần hiển thị bối cảnh dữ liệu khung thực thể cho các plugin của bên thứ ba. Mục đích là để cho phép các plugin này chỉ tìm nạp dữ liệu và không cho phép chúng đưa ra các chèn, cập nhật hoặc xóa hoặc bất kỳ lệnh sửa đổi cơ sở dữ liệu nào khác. Do đó làm thế nào tôi có thể làm cho một bối cảnh dữ liệu hoặc thực thể chỉ đọc.Cách làm cho bối cảnh dữ liệu khung thực thể chỉ đọc
Trả lời
Ngoài việc kết nối với người dùng chỉ đọc, có một vài điều khác bạn có thể làm với DbContext của mình.
public class MyReadOnlyContext : DbContext
{
// Use ReadOnlyConnectionString from App/Web.config
public MyContext()
: base("Name=ReadOnlyConnectionString")
{
}
// Don't expose Add(), Remove(), etc.
public DbQuery<Customer> Customers
{
get
{
// Don't track changes to query results
return Set<Customer>().AsNoTracking();
}
}
public override int SaveChanges()
{
// Throw if they try to call this
throw new InvalidOperationException("This context is read-only.");
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// Need this since there is no DbSet<Customer> property
modelBuilder.Entity<Customer>();
}
}
rõ ràng bạn là một 'người đàn ông bên trong' :) - điều này thú vị hơn nhiều so với kết nối 'chỉ đọc' – NSGaga
Lưu ý rằng việc sử dụng 'AsNoTracking() 'sẽ làm cho việc sử dụng tải chậm không thể thực hiện được. –
@ TomPažourek Tôi không biết điều đó có đúng không ... Tôi nghĩ EF vẫn tạo ra các proxy lười biếng, nhưng độ phân giải danh tính có thể hơi lạ một chút. – bricelam
Cung cấp cho họ ngữ cảnh với người dùng không có quyền ghi vào cơ sở dữ liệu. – vcsjones
Cảm ơn. Tôi đang sử dụng cơ sở dữ liệu SQLite. Chỉ cần phát hiện ra rằng nó có thể được mở trong chế độ chỉ đọc thông qua một tùy chọn chuỗi kết nối. – Harindaka
Không cung cấp cho họ một 'DbContext', cung cấp cho họ một' IQueryable' hoặc một số. –