小编gel*_*upa的帖子

如何以编程方式创建Android 4.0的新VPN接口?

我想知道是否可以使用Android 4.0中的新VPN API以编程方式创建VPN接口.我查看了http://developer.android.com/resources/samples/ToyVpn,但这是关于创建一个完整的VPN客户端来处理连接等.我只想添加一个新的VPN配置,并可能删除现有的配置.

有很多像这样的问题,但它们似乎都是预先4.0.我知道以前这是不可能的,但人们会认为新的VPN API提供了这样的功能.那么有没有人找到这样做的方法,还是仍然不可能?如果有办法,请指出正确的方向.

vpn android android-4.0-ice-cream-sandwich

29
推荐指数
1
解决办法
4万
查看次数

实体框架的模型缓存使得它对大量数据库模式毫无用处

我使用的SaaS产品具有一定的用户群.到目前为止,我们隔离客户数据的方法是拥有客户特定的数据库.这对Entity Framework 6非常有效,因为我们需要做的就是将客户特定的连接字符串传递给DbContext所有人,并且一切都运行良好.

由于与此问题无关的原因,我们需要从每个客户模型中移除这一个数据库.从数据隔离的角度来看,每个客户拥有一个数据库架构而不是每个客户一个数据库似乎是一个好主意.在做了一些测试之后,当我们讨论大量不同的模式时,它似乎几乎无法使用.

以下是我们目前使用方式的简化示例DbContext:

public class CustomDbContext : DbContext

    public CustomDbContext(IConnectionStringProvider provider)
        : base(provider.ConnectionString)
    {
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Configurations.Add(new SomeEntityMap());
        modelBuilder.Configurations.Add(new SomeOtherEntityMap());
    }
}
Run Code Online (Sandbox Code Playgroud)

以下是我们认为它可以如何工作的示例:

public class CustomDbContext : DbContext, IDbModelCacheKeyProvider

    public CustomDbContext(IConnectionStringProvider provider)
        : base(provider.ConnectionString)
    {
        CacheKey = provider.Schema;
    }

    public string CacheKey { get; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.HasDefaultSchema(CacheKey);
        modelBuilder.Configurations.Add(new SomeEntityMap());
        modelBuilder.Configurations.Add(new SomeOtherEntityMap());
    }
}
Run Code Online (Sandbox Code Playgroud)

微软已经足够允许一种绕过数据库模型的默认缓存的方法.使用模式名称作为缓存键可强制Entity Framework为每个模式创建新模型.理论上这是有效的.在实践中,不是真的.我创建了一个测试应用程序,它向一个导致DbContext实例化的服务发出请求.它CacheKey从一组5000个密钥中随机化,因此基本上当应用程序首次启动时,几乎每个请求都会OnModelCreating()被调用.在几百个请求之后,IIS工作进程已经占用了所有可用内存(使用大约9 GB),CPU使用率接近100%,服务几乎停滞不前.

我查看了Entity Framework的源代码,并希望使用带有模型构建器的空字符串 …

c# entity-framework multi-tenant

5
推荐指数
1
解决办法
106
查看次数