Entity Framework 代码先行
一、什么是Code First
为了支持以设计为中心的开发流程,EF还更多地支持以代码为中心 (code-centric) ,我们称为代码优先的开发,代码优先的开发支持更加优美的开发流程,它允许你在不使用设计器或者定义一个 XML 映射文件的情况下进行开发。
- 允许编写简单的模型对象POCO (plain old classes),而不需要基类。
- 通过"约定优于配置",使得数据库持久层不需要任何的配置
- 也可以覆盖"约定优于配置",通过流畅的 API 来完全定制持层的映射。
Code First是基于Entity Framework的新的开发模式,原先只有Database First和Model First两种。Code First顾名思义,就是先用C#/VB.NET的类定义好你的领域模型,然后用这些类映射到现有的数据库或者产生新的数据库结构。Code First同样支持通过Data Annotations或fluent API进行定制化配置。
二、Code First的演示
1、新建类库 EasyUI.Entities
2、添加引用
3、新建类
新建Resource、Role、RoleResource、User、UserRole、以及 EasyUIContext类
public class Resource
{
public int Id { get; set; }
public string Name { get; set; }
public string Controller { get; set; }
public string Action { get; set; }
public string IconCls { get; set; }
public Nullable<int> ParentId { get; set; }
public int Sort { get; set; }
public int Category { get; set; }
[ForeignKey("ParentId")]
public virtual Resource ParentResource { get; set; }
public virtual ICollection<Resource> ChildResources { get; set; }
public virtual ICollection<RoleResource> RoleResources { get; set; }
}
public class Role
{
public int Id { get; set; }
public string Name { get; set; }
public string Remark { get; set; }
public virtual ICollection<RoleResource> RoleResources { get; set; }
public virtual ICollection<UserRole> UserRoles { get; set; }
}
public class RoleResource
{
public int Id { get; set; }
public int RoleId { get; set; }
public int ResourceId { get; set; } [ForeignKey("RoleId")]
public virtual Role Role { get; set; }
[ForeignKey("ResourceId")]
public virtual Resource Resource { get; set; }
}
public class User
{
public int Id { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
public string RealName { get; set; }
public bool Gender { get; set; }
public string Phone { get; set; }
public string Email { get; set; }
public string Picture { get; set; }
public bool IsValid { get; set; }
public string Remark { get; set; }
public string Theme { get; set; }
}
public class UserRole
{
public int Id { get; set; }
public int UserId { get; set; }
public int RoleId { get; set; } [ForeignKey("RoleId")]
public virtual Role Role { get; set; }
[ForeignKey("UserId")]
public virtual User User { get; set; }
}
public class EasyUIContext : DbContext
{
public EasyUIContext()
: base("name=EasyUIConnectString")
{
} protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
//防止数据库生成的表是复数形式
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
} public DbSet<Resource> Resource { get; set; }
public DbSet<Role> Role { get; set; }
public DbSet<RoleResource> RoleResource { get; set; }
public DbSet<User> User { get; set; }
public DbSet<UserRole> UserRole { get; set; }
public DbSet<Log> Log { get; set; }
}
3、数据库连接字符串
<connectionStrings>
<add name="EasyUIConnectString" connectionString="server=LXHPGCA3R0P9HFU;uid=sa;pwd=******;database=EasyUI" providerName="System.Data.SqlClient" />
</connectionStrings>
Entity Framework 代码先行的更多相关文章
- Entity Framework 代码先行之约定配置
要更改EF中的默认配置有两个方法,一个是用Data Annotations(在命名空间System.ComponentModel.DataAnnotations;),直接作用于类的属性上面;还有一个就 ...
- Entity Framework 数据库先行、模型先行、代码先行
数据库先行(Database First):基于已存在的数据库,利用某些工具(如Vs提供的EF设计器)创建实体类,数据库对象与实体类的匹配关系等,你也可以手动修改这些自动生成的代码及匹配文件. 模型先 ...
- Entity Framework:代码优先
一.代码优先Code First EF6支持Oracle ODT 12C Release 3 (net4.5) DataModel(类)-->生成数据库DB 或 存在的数据库DB-->生成 ...
- Entity Framework 6.X实现记录执行的SQL功能
Entity Framework在使用时,很多时间操纵的是Model,并没有写sql语句,有时候为了调试或优化等,又需要追踪Entity framework自动生成的sql(最好还能记录起来,方便出错 ...
- 使用 Entity Framework Core 时,通过代码自动 Migration
一 介绍 在使用 Entity Framework Core (下面就叫 EF Core 吧)进行开发时,如果模型有变动,我们要在用 EF Core 提供的命令行工具进行手工迁移,然后再运行程序.但是 ...
- Visual Studio Entity Framework (EF) 生成SQL 代码 性能查询
Visual Studio Entity Framework (EF) 生成SQL 代码 性能查询 SQL 中,有SQL Server Profiler可以用来查询性能以及查看外部调用的SQL ...
- Entity Framework 5.0系列之自动生成Code First代码
在前面的文章中我们提到Entity Framework的"Code First"模式也同样可以基于现有数据库进行开发.今天就让我们一起看一下使用Entity Framework P ...
- Entity Framework 实体框架的形成之旅--几种数据库操作的代码介绍(9)
本篇主要对常规数据操作的处理和实体框架的处理代码进行对比,以便更容易学习理解实体框架里面,对各种数据库处理技巧,本篇介绍几种数据库操作的代码,包括写入中间表操作.联合中间表获取对象集合.递归操作.设置 ...
- Entity Framework 自动生成CodeFirst代码
前言 在前面的文章中我们提到Entity Framework的“Code First”模式也同样可以基于现有数据库进行开发.今天就让我们一起看一下使用Entity Framework Power To ...
随机推荐
- 《深入理解Java虚拟机》Java内存区域与内存溢出异常
注:“蓝色加粗字体”为书本原语 先来一张JVM运行时数据区域图,再接下来一一分析各区域功能: 程序计数器 程序计数器(program Counter Register)是一块较小的内存空间,它可以 ...
- ASP.Net MVC开发基础学习笔记:三、Razor视图引擎、控制器与路由机制学习
一.天降神器“剃须刀” — Razor视图引擎 1.1 千呼万唤始出来的MVC3.0 在MVC3.0版本的时候,微软终于引入了第二种模板引擎:Razor.在这之前,我们一直在使用WebForm时代沿留 ...
- 我所理解的RESTful Web API [设计篇]
<我所理解的RESTful Web API [Web标准篇]>Web服务已经成为了异质系统之间的互联与集成的主要手段,在过去一段不短的时间里,Web服务几乎清一水地采用SOAP来构建.构建 ...
- [视频],花一分钟来看看Worktile是如何为团队协作而生的
团队协作,我们想的更深.更远.更多,花一分钟来看看我们特别奉献的故事,然后去注册一个账号,邀请小伙伴一起来工作,你会体会Worktile才是真正懂你的协作方式. 我们想做的百年公司还有很多的路,这一站 ...
- LINUX 下安装一些东西,PHP Apach SSL 等
首先下载apache sourcecode:http://www.apache.org/dyn/closer.cgi configure: error: Cannot find ldap librar ...
- OpenCASCADE Linear Extrusion Surface
OpenCASCADE Linear Extrusion Surface eryar@163.com Abstract. OpenCASCADE linear extrusion surface is ...
- OpenCascade Primitives BRep-Torus
OpenCascade Primitives BRep-Torus eryar@163.com Abstract. BRep is short for Boundary Representation. ...
- KNN算法
1.算法讲解 KNN算法是一个最基本.最简单的有监督算法,基本思路就是给定一个样本,先通过距离计算,得到这个样本最近的topK个样本,然后根据这topK个样本的标签,投票决定给定样本的标签: 训练过程 ...
- c++ stringstream(老好用了)
前言: 以前没有接触过stringstream这个类的时候,常用的字符串和数字转换函数就是sscanf和sprintf函数.开始的时候就觉得这两个函数应经很叼了,但是毕竟是属于c的.c++中引入了流的 ...
- SQL Server 存储过程生成insert语句
你肯定有过这样的烦恼,同样的表,不同的数据库,加入你不能执行select insert 那么你肯定需要一条这样的存储过程,之需要传入表明,就会给你生成数据的插入语句. 当然数据表数量太大,你将最好用 ...