130

Entity Framework Data Context をサードパーティのプラグインに公開する必要があります。目的は、これらのプラグインがデータのみをフェッチできるようにし、挿入、更新、削除、またはその他のデータベース変更コマンドを発行できないようにすることです。したがって、データ コンテキストまたはエンティティを読み取り専用にする方法を教えてください。

4

6 に答える 6

205

読み取り専用ユーザーと接続する以外にも、DbContext に対して実行できることがいくつかあります。

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>();
    }
}
于 2012-05-03T20:38:33.330 に答える
1
public sealed class MyDbContext : DbContext
{
    public MyDbContext(DbContextOptions<MyDbContext> options, IHttpContextAccessor httpContextAccessor)
        : base(options)
    {
        ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking;
    }
}

SaveChanges をオーバーライドして例外をスローします

于 2021-08-23T09:35:44.933 に答える