3_EF环境搭建以及数据访问


简介


  • 对于JAVA程序员来讲,一般对Hibernate都是很熟悉的。EF和Hibernate所起的角色一致。而EF多是约定优于配置。同样EF也有DataBase First和Code First的开发方式,本文介绍Code First的编程方式。

  • 本文在连接的数据库是外置的SQLSERER


环境搭建

  • 项目(Project)->Manager NuGet Packages…

  • Online -> EntityFrameWork -> Install

  • 效果图
    xg


使用步骤


Model类的写法
  • 数据库中对应的表,要对应一个Model类,表之间的关系通过类之间字段的关系来表示。如上一篇文章分析的那样,分别定义了类
    User类
namespace GradeMIS.Models
{
    public class User
    {
        public int UserId { get; set; }
        public String UserName { get; set; }
        public int Score { get; set; }
        public int State { get; set; }
        public String UsePasswd { get; set; }
        public String Depart { get; set; }
        public String Domain { get; set; }
        public String RealName { get; set; }
        public String Protitle { get; set; }
        public String FinalGrade { get; set; }
        public virtual List<CopyRight> CopyRights { get; set; }
        public virtual List<Paper> Papers { get; set; }
        public virtual List<Patent> Patents { get; set; }
        public virtual List<Project> Projects { get; set; }
        public virtual List<TeachingPrize> TeachingPrizes { get; set; }
        public virtual List<TextBook> TextBooks { get; set; }    }
}

UserId对应的是数据库中User表的主键UserId,如果要使用UserName做主键,必须在UserName属性上面加上[KEY]
User类中定义的Papers列表前面的virtual是懒加载,只有用到的时候才会查询数据库。

Paper类

namespace GradeMIS.Models
{
    public class Paper
    {
        public int PaperId { get; set; }
        public String PaperName { get; set; }
        public String PaperType { get; set; }
        public DateTime PubTime{ get; set; }
        public String Desc { get; set; }
        public int UserId{ get; set; }
        public String Number { get; set; }
        public virtual User User{get; set; }
    }
}

Paper 类中的UserId要参照User的Id,所以在Paper类中必须定义UserId的属性。
其他类的Model和以上2个类似。

  • 在Web.config文件夹中配置数据库访问
  <connectionStrings>
    <add name="GradeMISEntities" providerName="System.Data.SqlClient" connectionString="Data Source=.;Initial Catalog=gradeMIS;User ID=sa;password=***;integrated security=true;" />
  </connectionStrings>

name很重要,会建立一个同名类。providerName必须有,提供者名称。connectionString:连接字符串,大家应该都很熟悉。

  • 接下来要建立一个同名的类GradeMISEntities,完成Model类和数据库中表的映射。
namespace GradeMIS.Models
{
    public class GradeMISEntities:DbContext
    {

            public DbSet<User> Users { get; set; }
            public DbSet<Admin> Admins { get; set; }
            public DbSet<CopyRight> CopyRights { get; set; }
            public DbSet<Paper> Papers { get; set; }
            public DbSet<Patent> Patents { get; set; }
            public DbSet<Project> Projects{ get; set; }
            public DbSet<TeachingPrize> TeachingPrizes { get; set; }
            public DbSet<TextBook> TextBooks { get; set; }
            public DbSet<News> Newss { get; set; }
            public DbSet<Banner> Banners { get; set; }
    }
}

<>中的内容是Model类名,后面跟着的是数据库中的表的名称。

  • 设置初试化数据要有一个SampleData 插入数据
    下面是数据文件:
namespace GradeMIS.Models
{
public class SampleData : DropCreateDatabaseIfModelChanges<GradeMISEntities>
{
    protected override void Seed(GradeMISEntities context)
    {
       var users = new List<User>
       {
         new User { UserName = "ymlabner", Score=0,State=1 , UsePasswd="123123",Depart="计算机学院",Domain="Java3D",RealName="yml", Protitle="院士",FinalGrade="博士"},
            };       
        }
    }
}

但要随着程序运行就插入数据,还要在Global.aspx文件中修改

protected void Application_Start()
{
///加上这句代码
System.Data.Entity.Database.SetInitializer(new SampleData());
AreaRegistration.RegisterAllAreas();            WebApiConfig.Register(GlobalConfiguration.Configuration);            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
}
  • 当然要想随着程序启动就完成数据库创建,必须进行实例化,在HomeController中实例化
GradeMISEntities db = new GradeMISEntities();
  • 运行程序后数据库变建立好了,程序和数据库和之间的映射建立好了,连初试数据也初始化了。
    效果

接下来在Controller的Action中就可以调用这个实例进行数据库的访问了,当然你可以将这些操作封装在数据访问层中。

采用EF增删改查的简单介绍(以User类为例)

GradeMISEntities db = new GradeMISEntities();
Create:

db.Users.Add(user);//user是传入的User对象
db.saveChages();

Delete:

db.Remove(user); //user是传入的User对象
db.saveChanges();

Query:

db.Users.ToList();//查询所有
db.Users.Single(g=>g.UserId==id)//id是传入的参数,查询结果为空会报错
db.User.SingleOrDefault(g=>g.UserId==id)//1条数据或空
db.User.Where(g=>g.UserId==id)//多条数据
、、、

Edit:

  db.Entry(user).State = EntityState.Modified;//user为参数
  db.SaveChanges();

小结


1 小结
本文介绍了Entity FrameWork的环境搭建以及在MVC项目中的使用,以及EF增删改查额简单语法。

2 参考资料
EF CODE FIRST 快速入门

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值