首页 > 代码库 > 在MVC3中使用code first生成数据局库并操作数据库

在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();        }

 

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

 

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