ASP.NET MVC-具有相同模型的多个表(实体),每次都不重新启动



我遇到了如何正确设置DbContext的问题。假设我有一个.db文件,其中包含表";订单1";以及";订单2";。两者都基于OrderModel。有可能以这种方式配置应用程序(可能是DbContext(吗;订单3";等等。同样基于OrderModel,我可以在不改变应用程序配置方式的情况下访问它,并重新编译(重启(整个应用程序。

我试图在DbContext中使用SharedTypeEntity来实现它,但我想,然后,我需要在构建器中添加每个SharedTypeEntity,即OnModelCreating方法。这对我来说意味着,如果我加上";订单3";表添加到.db,我还需要将其作为SharedTypeEntity添加到OnModelCreating中,并重新编译应用程序以应用这些更改。

这就是我现在拥有的:

DbContext:

public class TestDbContext : IdentityDbContext<IdentityUser>
{
public TestDbContext(DbContextOptions<TestDbContext> options)
: base (options)
{
}
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
builder.SharedTypeEntity<OrderModel>("OrdersData");
builder.SharedTypeEntity<OrderModel>("Orders1Data");
}
}

控制器:

public class TestController : Controller
{
public TestController(TestDbContext db)
{
Db = db;
}
public IActionResult Index()
{
var orders1Data = Db.Set<OrderModel>("Orders1Data");
var ordersData = Db.Set<OrderModel>("OrdersData");
return View();
}
private readonly TestDbContext Db;
}

我终于找到了自己问题的解决方案。我创建了一个单独的实体,而不是SharedTypeEntity,并且在控制器中我使用RawSqlQuery:

DbContext

public class TestDbContext : DbContext
{
public TestDbContext(DbContextOptions<TestDbContext> options)
: base (options)
{
}
public DbSet<OrderModel>? OrdersData { get; set; }
}

控制器

public class TestController : Controller
{
public TestController(TestDbContext db)
{
Db = db;
}
public IActionResult Index()
{
OrderModel[] models1 = new OrderModel[0];
OrderModel[] models = new OrderModel[0];
if (Db.OrdersData != null)
{
models = Db.OrdersData.FromSqlRaw("SELECT * FROM OrdersData").ToArray();
models1 = Db.OrdersData.FromSqlRaw("SELECT * FROM Orders1Data").ToArray();
}
return View(models1);
}
private readonly TestDbContext Db;
}

现在,我可以使用字符串插值将查询表设置为我想要的任何值,并且我可以创建更多具有相同类型的表,并且可以访问它,而无需重新启动/重建整个应用程序

相关内容

最新更新