为ASP.NET 5应用程序添加内存存储

时间:2015-07-23 06:18:12

标签: c# asp.net asp.net-mvc

我正在尝试为我的ASP.NET 5应用添加内存商店。

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();

    services.AddEntityFramework()
        .AddInMemoryStore()
        .AddDbContext<MyDbContext>();
}

虽然我收到以下错误:

$ dnx . kestrel
* Assertion at loader.c:1189, condition `!mono_loader_get_last_error ()' not met

Stacktrace:

  at <unknown> <0xffffffff>
  at Nalie.Startup.ConfigureServices (Microsoft.Framework.DependencyInjection.IServiceCollection) <0x0003a>
  at (wrapper runtime-invoke) <Module>.runtime_invoke_void__this___object (object,intptr,intptr,intptr) <0xffffffff>
  at <unknown> <0xffffffff>
  at (wrapper managed-to-native) System.Reflection.MonoMethod.InternalInvoke (System.Reflection.MonoMethod,object,object[],System.Exception&) <0xffffffff>
* Assertion at loader.c:1912, condition `!mono_loader_get_last_error ()' not met

Abort trap: 6

1 个答案:

答案 0 :(得分:1)

您需要更新AddDbContext调用以指定要使用的提供程序。

AddDbContext<MyDbContext>(options => options.UseInMemoryDatabase());

AddInMemory的调用只是在DI中设置了该数据存储所需的服务,但您仍需要告诉上下文使用哪个提供程序。如果你看到一些更复杂的东西,这就会变得更加清晰。

services.AddEntityFramework() .AddInMemoryStore() .AddSqlServer() .AddDbContext<MyDbContext>(options => options.UseInMemroryDatabase()) .AddDbContext<MyOtherDbContext>(options => options.UseSqlServer("<connection string>"));

InMemory有点独特之处在于它不需要使用任何配置(与需要连接字符串的其他提供程序不同)。所以我们确实考虑过默认选择InMemory,如果它是唯一注册的提供者......但这看起来非常像一个特殊情况,只会妨碍人们理解事物是如何工作的。