我试图在我的Windows服务应用程序中使用EF Core 2.0(目标.NET Framework 4.6.2)。为了让事情变得有趣,我不想像这样创建实例
DbContext ctx = new DbContext(connectionString)
我希望将它与依赖注入一起使用(StructureMap 4.5.2)。
我有一个IDbContext,我的DbContext看起来像:
public DbContext(string connectionString): base(new DbContextOptionsBuilder().UseSqlServer(connectionString).Options)
{}
我和#34;奇怪的原因" ctor是我不知道在Windows服务中配置EF Core的位置或方式。我在哪里或如何告诉Windows服务在app.config中使用连接字符串。
我现在所做的是告诉StructureMap注入连接字符串,如下所示:
new Container(config =>
{
// Register stuff in container, using the StructureMap APIs...
config.Scan(_ =>
{
_.TheCallingAssembly();
_.WithDefaultConventions();
_.LookForRegistries();
});
config.For<IDbContext>().Use<DbContext>().Ctor<string>("connectionString").Is(_connectionString);
});
有没有办法在.NET Core MVC应用程序中执行此类似的操作:
services.AddDbContext<DbContext>(options =>
options.UseSqlServer(connectionString));
其中服务是IServiceCollection实例。
有人可以指出我正确的方向如何以最佳方式做到这一点?
答案 0 :(得分:0)
这是我怎么做的..
public class RepositoryData : DbContext {
public RepositoryData(string appSettingsOrConnectionName = null) :base(GetConnectionString(appSettingsOrConnectionName ?? "connection"))
{
}
private static string GetConnectionString(string appSettingsOrConnectionName = null)
{
if (!string.IsNullOrEmpty(appSettingsOrConnectionName) && appSettingsOrConnectionName.Contains(";"))
return appSettingsOrConnectionName;
if (!string.IsNullOrEmpty(ConfigurationManager.AppSettings[appSettingsOrConnectionName]))
return ConfigurationManager.ConnectionStrings[ConfigurationManager.AppSettings[appSettingsOrConnectionName]].ConnectionString;
else if (!string.IsNullOrEmpty(ConfigurationManager.ConnectionStrings[appSettingsOrConnectionName].ConnectionString))
return ConfigurationManager.ConnectionStrings[appSettingsOrConnectionName].ConnectionString;
else if (!string.IsNullOrEmpty(ConfigurationManager.ConnectionStrings["test"].ConnectionString))
{
appSettingsOrConnectionName = "test";
return ConfigurationManager.ConnectionStrings[appSettingsOrConnectionName].ConnectionString;
}
else return _defaultConnString;
}
}