具有相同架构 EF Core 的多个数据库?
Multiple Databases with Same schema EF Core?
我有一个项目,我需要使用相同 SQL 服务器连接的两个不同数据库。
对于第一个数据库,我使用了所有用户通用的 DatabaseFirstApproach。
第二个数据库是针对每个用户的,但它的模式是相同的,SQL 服务器中有很多数据库。
我的问题是,如何在我的项目中添加这些数据库?
它们具有相同的架构,因此它们应该具有相同的模型,我们可以使用 ef core 为不同的数据库创建共享模型吗?
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=****");
}
}
正如我在评论中所写:
每个数据库的域模型都相同(不需要为每个数据库启动数据库第一个生成器,对一个数据库使用它就足够了)。您可以使用一个连接连接到每个数据库。但是在连接中,您应该将数据库名称更改为您需要的名称。
如果您不连接来自不同数据库的数据,则不需要不同的上下文。如果您需要跨数据库查询,那么您需要不同的 dbcontext。
您应该更正您的 dbContext class:
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
我有一个项目,我需要使用相同 SQL 服务器连接的两个不同数据库。
对于第一个数据库,我使用了所有用户通用的 DatabaseFirstApproach。
第二个数据库是针对每个用户的,但它的模式是相同的,SQL 服务器中有很多数据库。
我的问题是,如何在我的项目中添加这些数据库?
它们具有相同的架构,因此它们应该具有相同的模型,我们可以使用 ef core 为不同的数据库创建共享模型吗?
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=****");
}
}
正如我在评论中所写:
每个数据库的域模型都相同(不需要为每个数据库启动数据库第一个生成器,对一个数据库使用它就足够了)。您可以使用一个连接连接到每个数据库。但是在连接中,您应该将数据库名称更改为您需要的名称。
如果您不连接来自不同数据库的数据,则不需要不同的上下文。如果您需要跨数据库查询,那么您需要不同的 dbcontext。
您应该更正您的 dbContext class:
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