在MVC3中使用code first生成数据局库并操作数据库

1.建立Users和UserInfos两个实体类 对应的是数据库中的表

 public class User
    {
        //类名+Id(User+Id)组成的字符串在数据库表中会设置该字段是主键且是按1的增量增长
        public int UserId { get; set; }
        public string UserName { get; set; }
    }

UserInfos表

 public class UserInfo
    {
        public int UserInfoId { get; set; }
        public string UserAddr { get; set; }
        public int UserTel { get; set; }
        public char Sex { get; set; }
        public int  UserPost { get; set; }
        //这里表之间的联系,User实体与UserInfo,会把User表的主键生成对应生成UserInfo表外键
        public virtual User User { get; set; }
    }

自动生成数据库表:

2.建立一个操作数据库的实体类EntityFrameworkModel,必须继承DbContext(通过此类来操作数据库),该类里面的 Users和UserInfos就是在数据库中生成的表

//管理数据实体(对应数据库中的表);通过这个类可以完成对数据增删改查
    public class EntityFrameworkModel : DbContext
    {
        //根据这里字段名生成是数据库的表名
        public DbSet<User> Users { get; set; }
        public DbSet<UserInfo> UserInfos { get; set; }
      
    }


3.在配置文件中添加连接数据库的的字符串     注:配置文件的 name值 必须与 操作数据库的实体类的类名 一致  

 <connectionStrings>
    <!--注意这里的name的值必须与管理数据实体类名一样,否则会无法生成数据库-->
    <!--连接字符串connectionString的database的值可任意,该值就是对应数据库名-->
    <add  providerName="System.Data.SqlClient" name="EntityFrameworkModel" 
          connectionString="Server=.;Database=EntiyFrameWork;Integrated Security=true"/>
  </connectionStrings>

上面的操作就可以生成一个无数据的数据库了 当然你也可以在代码实现在数据库生成的时候给数据库加载数据

创建一个加载数据的LoadData类(这里我就每个表添加两条数据了)

 //这里要继承 :DropCreateDatabaseIfModelChanges<EntityFrameworkModel>类,
   //当模型类结构改变的时候就会重新加载数据(这里的模型类就是User UserInfo)
    public class LoadData:DropCreateDatabaseIfModelChanges<EntityFrameworkModel>
    {

        protected override void Seed(EntityFrameworkModel context)
        {
            //创建User集合
            List<User> users = new List<User>{
                new User(){UserName="张三"},
                new User(){UserName="金三胖"}
            };
            //创建UserInfo集合
            //User=users.Single(u=>u.UserName=="张三") 用linq表达式添加数据(实际是把user表的id添加到userinfo中)
            List<UserInfo> userlist = new List<UserInfo> { 
                new UserInfo(){ Sex=n, User=users.Single(u=>u.UserName=="张三"), UserAddr="天国", UserTel=119, UserPost=11},
                new UserInfo(){ Sex=s, User=users.Single(u=>u.UserName=="金三胖"), UserAddr="天国", UserTel=119, UserPost=22},
            };
            //把数据添加到管理数据实体中,通过这个实体吧数据加载到数据库中
            foreach(UserInfo u in userlist){
                context.UserInfos.Add(u);
            }

        }
    }

注意:还需在全局文件中的Application_Start()加上一句加载数据库数据的代码

protected void Application_Start()
        {
            //当网站第一次运行时就加载数据库数据
            System.Data.Entity.Database.SetInitializer(new Entity_Framework的使用.Models.LoadData());//向数据库添加数据
            //System.Data.Entity.Database.SetInitializer(new OdeToFoodDBInitializer());
            AreaRegistration.RegisterAllAreas();

            RegisterGlobalFilters(GlobalFilters.Filters);
            RegisterRoutes(RouteTable.Routes);
        }


这样当数据库生成的时候就可以加载数据了

在控制器中操作数据库就可以了,,这样就不用通过编写大量的sql语句来查询数据了

public ActionResult Index()
        {
            int count = ef.Users.Count();//获得User表总共有多少条
            List<User> u = ef.Users.ToList();//获得User的全部数据;
            User user = ef.Users.FirstOrDefault(us => us.UserId == 1);//获得id为1的数据

            //ef.Users.Remove(new User(){ UserId=1});//删除数据,这里传通过一个User实体来删除数据
            //ef.SaveChanges();执行删除

            //ef.Users.Add(new User() { UserName = "新增数据" });//添加数据,这里传通过一个User实体来添加数据
            //ef.SaveChanges();执行添加

            //更新数据 首先要查询该条数据 然后更新该实体的值 最后执行mbsc.SaveChanges();就可以更新成功了
            //user.UserName = "更新了";//把刚刚查询出的数据更改名字
            //ef.SaveChanges();return View();
        }

 

好了这次就说到这里··如有错误欢迎大家指正~!!!

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。