EF框架下实现动态建库切库

引言:


从第一开始,我就想,我们要想建一整套数据库,一个人来注册了,我们就可以给它注册一个库,这个库中所有的表结构,都是先前就准备好了的,我想,这个真的用EF的CodeFirst实现就最好了。因为我们的所有的ViewModel都是齐全的,用ModelFirst是需要画实体关联图的,用DBFirst就不用说了。


实现思路:


前期用我们所有的Model实体都是很好收集的,因为代码都是事先写好的,大概有100多个实体,这些实体就要满足;一旦有人进行注册,我们就给他生成这么多表的一个数据库。原理很简单,我们都知道EF实现这个的时候,用CodeFirst最合适不过了。


然后就是实现步骤,其实所有实现数据库连接和操作无非就是三步:连接、准备执行语句、执行。


其实用CodeFiist的这三步就是比ODBC进行了封装,使用户操作更加少的代码,只要写实体和Context(上下文)就可以了。实现起来比ODBC要简单的多。


我一开始一直以为EF是只读Web.config的,而我们都知道,Web.config文件的ConnectString节点是可以进行运行时的修改的,但是在我们修改了,但是问题出在Web.config只在系统开启的时候,才会加载出来。我试过了很多方法去解决web.config只在系统开启的时候加载这个问题,却忽略了一个真正能解决这个问题的方法:EF是不是只读Web.config?


这个问题还是江霄解决的,其实EF不是只读Web,config文件的。我们可以看看DbContext:


<span style="font-size:18px;">

        public DbContext(string nameOrConnectionString);</span><span style="font-size:18px;">
</span>


DbContext是EF给我们封装的访问数据库的方法,我们可以看到DbContext中的参数是有两种的一种是name 一种是ConnectString,也就是说,我们可以传一个数据库的名称,也可以穿一个数据库连接字符串,这样我们就可以不用讲数据库连接字符串放在Web,cofig中了。


这个真心太棒了,我们在解决问题的时候,一定要思维很缜密,为一方面我们要多看看底层的封装,其实EF就是ODBC等底层的数据库连接进行了封装,所有我们看起来很高大上的东西,其实都是对最基本的东西进行封装形成的,很多东西其实都不是新的东西。


代码实现:


1、建库


这里我要将一个库,库中有两个表:


<span style="font-size:18px;">using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;

namespace WebDemo.Models
{
    [Serializable]
    public class Student
    {
        [StringLength(32)]
        public virtual string SName { get; set; }

        [StringLength(32)]
        public virtual string Address { get; set; }

        [Key]
        public virtual int Id { get; set; }
    }
}</span>

<span style="font-size:18px;">using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Web;

namespace WebDemo.Models
{
    [Serializable]
    public class UserInfo
    {
        public string UName { get; set; }

        [Required]
        [MaxLength(32)]
        public string UPwd
在Spring Boot中使用Redisson切换Redis数据库是相对简单的。首先,您需要在您的项目中添加Redisson的依赖。在pom.xml文件中添加以下依赖项: ```xml <dependency> <groupId>org.redisson</groupId> <artifactId>redisson-spring-boot-starter</artifactId> <version>3.16.1</version> </dependency> ``` 接下来,您需要在application.properties或application.yml文件中配置Redis连接信息: ```properties spring.redis.host=127.0.0.1 spring.redis.port=6379 spring.redis.password= ``` 然后,在您的代码中,您可以使用`RedissonClient`接口来连接Redis,并使用`getBucket`方法来获取Redisson对象,从而实现切换Redis数据库。例如: ```java import org.redisson.api.RedissonClient; import org.redisson.api.RBucket; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class RedisService { @Autowired private RedissonClient redissonClient; public void switchDatabase(int databaseIndex) { redissonClient.getBucket("databaseIndex").set(databaseIndex); } public int getCurrentDatabase() { RBucket<Integer> bucket = redissonClient.getBucket("databaseIndex"); return bucket.get(); } // 其他操作方法... } ``` 在上面的示例代码中,`switchDatabase`方法用于切换Redis数据库,将数据库索引存储在名为`databaseIndex`的Redis键中。`getCurrentDatabase`方法用于获取当前正在使用的数据库索引。 这样,您就可以使用Redisson在Spring Boot中切换Redis数据库了。注意,Redis数据库索引从0开始,您可以根据自己的需求进行调整。
评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值