如何在缓存层中保存EF

本文关键字:保存 EF 缓存 | 更新日期: 2023-09-27 17:57:33

我使用的是实体框架。

我将对象保存在MS_library缓存管理器中。

然而,我现在遇到了一个问题:当我从缓存中检索这个对象时

其ContextObj已被释放。

如何在不将每个实体映射到模型对象的情况下解决此问题?

public partial class MaMDBEntities : DbContext
{
    public MaMDBEntities()
        : base("name=MaMDBEntities")
    {
        ObjectContext.
    }
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        throw new UnintentionalCodeFirstException();
    }
    public DbSet<App> Apps { get; set; }
    public DbSet<AppsData> AppsDatas { get; set; }
    public DbSet<Browser> Browsers { get; set; }
    public DbSet<BrowserVersion> BrowserVersions { get; set; }
    public DbSet<BrowserVerToCriteria> BrowserVerToCriterias { get; set; }
    public DbSet<CommonConfig> CommonConfigs { get; set; }
    public DbSet<Country> Countries { get; set; }
    public DbSet<Criterion> Criteria { get; set; }
    public DbSet<CTID> CTIDS { get; set; }
    public DbSet<DatabaseLastUpdate> DatabaseLastUpdates { get; set; }
    public DbSet<Group> Groups { get; set; }
    public DbSet<MamConfiguration> MamConfigurations { get; set; }
    public DbSet<MamConfigurationCTID> MamConfigurationCTIDs { get; set; }
    public DbSet<MamConfigurationStatus> MamConfigurationStatuses { get; set; }
    public DbSet<Pair> Pairs { get; set; }
    public DbSet<SettingsServicesConfig> SettingsServicesConfigs { get; set; }
    public DbSet<sysdiagram> sysdiagrams { get; set; }
    public DbSet<CtidPgPastExistence> CtidPgPastExistences { get; set; }
    public virtual ObjectResult<usp_AppsData_GetAll_Result> usp_AppsData_GetAll()
    {
        return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<usp_AppsData_GetAll_Result>("usp_AppsData_GetAll");
    }
}

如何在缓存层中保存EF

加载尝试使用include()访问的导航属性,或者关闭对象上下文属性中的ProxyObjectCreation。

Context.SomeCollection.Include("NavigationalProperty")

Context.Configuration.ProxyCreationEnabled = false;

如果您决定关闭代理创建,则必须重新测试所有使用延迟加载的查询,因为在您的解决方案中会引入静默错误。