Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
EF7+ASP.NET5 beta8-数据库初始值设定项_Asp.net_Asp.net Mvc_Entity Framework - Fatal编程技术网

EF7+ASP.NET5 beta8-数据库初始值设定项

EF7+ASP.NET5 beta8-数据库初始值设定项,asp.net,asp.net-mvc,entity-framework,Asp.net,Asp.net Mvc,Entity Framework,我正在开发多租户应用程序ASP.NET5+EF7。每个租户都有单独的数据库。我将有一个单独的租户帐户数据数据库。我已经在这个单独的数据库的启动类中注册了EF服务。我对迁移有问题。我无法创建EF迁移,直到使用特定连接字符串将tenantDbContext注册为服务。但对于每个租户,此连接字符串必须是动态的。。。有什么想法吗?为租户管理DBContext的最佳选项是什么 未来的编辑保护覆盖无效配置是关键如何做:这是一个好的解决方案吗 services.AddEntityFramework()

我正在开发多租户应用程序ASP.NET5+EF7。每个租户都有单独的数据库。我将有一个单独的租户帐户数据数据库。我已经在这个单独的数据库的启动类中注册了EF服务。我对迁移有问题。我无法创建EF迁移,直到使用特定连接字符串将tenantDbContext注册为服务。但对于每个租户,此连接字符串必须是动态的。。。有什么想法吗?为租户管理DBContext的最佳选项是什么

未来的编辑保护覆盖无效配置是关键如何做:这是一个好的解决方案吗

 services.AddEntityFramework()
    .AddSqlServer()
    .AddDbContext<ApplicationDbContext>(options =>
                options.UseSqlServer(Configuration["Data:DefaultConnection:ConnectionString"]));


services.AddEntityFramework()
     .AddSqlServer()
            .AddDbContext<TenantDbContext>();  




public class TenantDbContext : IdentityDbContext<ApplicationUser>
{
    public TenantDbContext()        //development database with no connectionString in constructor
    {
        this._connectionString = "Connection String";
    }
    public TenantDbContext(string ConnectionString)
    {
        this._connectionString = ConnectionString;
    }

    private string _connectionString { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    { 
        optionsBuilder.UseSqlServer(_connectionString); 
    }  

…etc

正如我在评论中提到的,我自己没有尝试过多租户/多数据库,但尝试了以下方法:

您可以使用DbContext CreateIfNotExists方法

如果您有Migrations/Configuration.cs,则可以将AutomaticMigrationsEnabled属性设置为false

可能还需要关闭初始值设定项:Database.SetInitializernull

抱歉,我不知道更多细节,比如从DB自动创建新租户的工作流程,或者屏幕上填写了连接字符串和名称等。我无法给出更详细的建议。我建议将数据层从上下文中抽象出来。对于开发人员来说,选择正确的上下文似乎不是一个好主意。因此使用了工厂


一个选项总是要求将租户id传递到所有服务或存储库方法中。我猜这可能是控制器中可用的某种用户声明。

我最初的想法是,不要在启动时连接上下文,而是从工厂获取上下文。类似于:ContextFactory.Createtenant。对于迁移,您可以使用:在此处添加迁移MyMigration-ConnectionString连接字符串?谢谢你的回复。新租户的调配必须自动化-C。。。想法:我可以在构造函数中用特定的连接字符串实例化DbContext以进行连接。问题是如何在没有迁移的情况下创建数据库我无法创建迁移,直到服务在启动类中注册为止我不会使用SQL脚本…也许是第二个想法。是否可以通过数据库初始值设定项在不迁移的情况下创建数据库?如果是,将来如何管理数据库更改?谢谢您的回答。好主意。。我现在有可能构建tenantDbContext。我在这里找到了EF7数据库初始值设定项:每个tenantDbContext都可以由factory基于url:tenant1.site.com进行实例化,并注入到通用存储库中,用于特定的租户数据库操作。我将为每个请求使用一个实例。