具有相同架构EF核心的多个数据库?

问题描述 投票:0回答:1

我有一个项目,需要使用同一SQL Server连接的两个不同数据库。

对于第一个数据库,我使用了所有用户通用的DatabaseFirstApproach

第二个数据库是每个用户专用的,但是在其模式上是相同的,SQL Server中有许多数据库。

我的问题是,如何在我的项目中添加这些数据库?

它们具有相同的架构,因此它们应该具有相同的模型,我们可以使用ef核心为不同的数据库创建共享模型吗?

                   Model
 db1 db2 db3 db4 db5 db6 db7 db8 db9 db10

我应该使用数据库优先方法将它们全部添加吗?

这会使项目结构重复(相同的模型会重复很多次!)!

对于我的应用程序中的每个客户端,我将使用此代码:

 //Connect with the selected customer's connection string
          using (SqlConnection ccn = new SqlConnection(EConnectionString.ToString()))
        {
            DateTime lastDayinTheYear = new DateTime(DateTime.Now.Year, 12, 31);
            GetListEntrepriseActivitesByPeriode(ccn,IdEnterprise, DateTime.Now, lastDayinTheYear);

        };

更新

这是我的“ OnConfiguring”方法:

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        if (!optionsBuilder.IsConfigured)
        {

            optionsBuilder.UseSqlServer("Server=.;Database=AZPDBDEMOGZ;UID=DEVAZPROJET-2019;PWD=****");
        }
    }
sql-server ef-database-first ef-core-2.2
1个回答
0
投票

正如我在评论中写道:

域模型对于每个数据库都是相同的(不需要为每个数据库启动数据库第一个生成器,将其用于一个数据库就足够了。)您可以使用一个连接来连接每个数据库。但是在连接时,您应该将数据库名称更改为所需的名称。

如果不连接来自不同数据库的数据,则不需要其他上下文。如果需要跨数据库查询,则需要不同的dbcontext。

您应该更正dbContext类:

public class BloggingContext : DbContext
{
    public BloggingContext(DbContextOptions<BloggingContext> options)
        : base(options)
    { }

    public DbSet<Blog> Blogs { get; set; }

    //without OnConfiguring method
}

然后您可以将此dbContext用作:

var optionsBuilder = new DbContextOptionsBuilder<BloggingContext>();
optionsBuilder.UseSqlServer("You connection string");

using (var context = new BloggingContext(optionsBuilder.Options))
{
  // do stuff
}

更多详细信息,您可以找到here

© www.soinside.com 2019 - 2024. All rights reserved.