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 { get; set; }
        [Key]
        [DatabaseGenerated(DatabaseGenerate
评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值