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 ...
随机推荐
- 【腾讯Bugly干货分享】Redex初探与Interdex:Andorid冷启动优化
本文来自于腾讯bugly开发者社区,未经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/583b9e3ee8992c2c2df6e6ac 导语 早在去年10月份,face ...
- 【优雅代码】深入浅出 妙用Javascript中apply、call、bind
这篇文章实在是很难下笔,因为网上相关文章不胜枚举. 巧合的是前些天看到阮老师的一篇文章的一句话: “对我来说,博客首先是一种知识管理工具,其次才是传播工具.我的技术文章,主要用来整理我还不懂的知识.我 ...
- 新版C#编译器关于函数闭包的一处更改
感谢@DiryBoy的补充,他提到这个问题在MSDN上是有说明的: http://msdn.microsoft.com/en-us/library/vstudio/hh678682.aspx 在Vis ...
- Gamma函数是如何被发现的?
学过微积分的人,肯定都接触过Euler积分,按教科书上的说法,这是两种含有参变量的定积分,但其实没那么玄乎,它们只是两个函数.其中第一型Euler积分叫\(B\)-函数,第二型Euler积分叫\(\G ...
- Swift语言快速入门
Swift语言快速入门(首部同步新版官方API文档和语法的Swift图书,确保代码可编译,作者专家在线答疑,图书勘误实时跟进) 极客学院 编著 ISBN 978-7-121-24328-8 201 ...
- iOS-应用闪退总结
一.之前上架的 App 在 iOS 9 会闪退问题(iOS系统版本更新,未配置新版本导致闪退问题) 最新更新:(2015.10.02) 开发环境: Delphi 10 Seattle OS X El ...
- javascript命名规范
javascript命名规范 3.命名 命名的方法通常有以下几类: a).命名法说明 1).camel命名法,形如thisIsAnApple 2).pascal命名法,形如ThisIsAnApple ...
- bootstrap-modal 学习笔记 源码分析
Bootstrap是Twitter推出的一个开源的用于前端开发的工具包,怎么用直接官网 http://twitter.github.io/bootstrap/ 我博客的定位就是把这些年看过的源码给慢慢 ...
- 应用程序框架实战二十九:Util Demo介绍
上文介绍了我选择EasyUi作为前端框架的原因,并发放了最新Demo.本文将对这个Demo进行一些介绍,以方便你能够顺利运行起来. 这个Demo运行起来以后,是EasyUi的一个简单CRUD操作,数据 ...
- 关于MyCAT字符集的验证
MyCAT默认字符集是UTF8 下面通过查看日志来验证不同的MySQL客户端字符集和服务器字符集对于MyCAT的影响. 日志中与字符集有关的主要有三部分: 1. 初始化MyCAT连接池 2. 心跳检测 ...