EF学习和使用(三)Code First
Code First模式我们称之为“代码优先”模式。从某种角度来看。其实“Code First”和“Model First”区别并非太明显。仅仅是它不借助于实体数据模型设计器。而是直接通过编码方式设计实体模型(这也是为什么最開始“Code First”被叫做“Code Only”的原因)。
可是对于EF它的处理过程有所区别,比如我们使用Code First就不再须要EDM文件,全部的映射通过“数据凝视”和“fluent API”进行映射和配置。
另外须要注意的是“Code First”并不表示一定就要手动编写实体类。其实假设有数据库的话能够取巧,通过现有数据库直接生成实体类。
Code First怎样使用
首先
创建一个控制台应用程序。接下来加入两个类“Order”和“OrderDetail”。须要注意的是这两个类有两个导航属性“Order.OrderDetails”和“OrderDetail.Order”:
using System;
using System.Collections.Generic;
namespace CodeFirst
{
public class Order
{
public int Id { get; set; }
public string Customer { get; set; }
public System.DateTime OrderDate { get; set; }
public virtual List<OrderDetail> OrderDetails { get; set; }
}
}
using System;
using System.Collections.Generic;
namespace CodeFirst
{
public partial class OrderDetail
{
public int Id { get; set; }
public string Product { get; set; }
public string UnitPrice { get; set; }
public int OrderId { get; set; }
public virtual Order Order { get; set; }
}
}
其次
有了这两个类之后还须要定义一个数据库上下文,来进行数据操作,这个类必须继承于”System.Data.Entity.DbContext”类。因此接下来我们须要引入EntityFramework包,可通过NuGet进行在线安装。
数据库上下文操作类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Entity;
namespace CodeFirst
{
public class OrderContext : DbContext
{
public DbSet<Order> Orders { get; set; }
public DbSet<OrderDetail> OrderDetails { get; set; }
}
}
測试
然后我们进行測试,在这个类中我们首先创建了一个Order实例,接着编码查询:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace CodeFirst
{
class Program
{
static void Main(string[] args)
{
using (var ctx = new OrderContext())
{
var o = new Order();
o.OrderDate = DateTime.Now;
ctx.Orders.Add(o);
ctx.SaveChanges();
var query = from order in ctx.Orders
select order;
foreach (var q in query)
{
Console.WriteLine("OrderId:{0},OrderDate:{1}", q.Id, q.OrderDate);
}
Console.Read();
}
}
}
}
查询结果如图:
哎等等好像哪里不正确!
咱们明明没有进行不论什么数据库的配置,没有说明往哪个数据库加入。也没有设置连接字符串。可是添加了一条数据,通过查询发现确实保存上了,那么我们的数据究竟在哪呢?其实假设用户不进行数据库配置EF默认会使用“.\SQLEXPRESS”数据库实例,假设你没有安装“.\SQLEXPRESS”则默认使用LocalDb。关于LocalDb的详细细节请看:SQL Server 2012 Express LocalDB,通常会存放在文件夹:“C:\Users\username”,能够看到创建了一个名为“CodeFirst.OrderContext”的数据库:
可是正常情况下我们是须要自己控制建立数据库的,比如我想让他保存在某台server上。而且数据库的名字是“CodeFirstDb”,此时我们就须要在配置文件App.Config中配置一个数据库连接串,然后在我们的数据库上下文中指定这个连接名称。
在配置文件里加入:
<connectionStrings>
<add name="CodeFirstDb" connectionString="Data Source=.;Database=CodeFirstDb;UID=sa;PWD=123456;" providerName="System.Data.SqlClient"></add>
</connectionStrings>
改动OrderContext类:
构造函数多了一个连接名參数:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Entity;
namespace CodeFirst
{
public class OrderContext : DbContext
{
public OrderContext(string connectionName)
: base(connectionName) { }
public DbSet<Order> Orders { get; set; }
public DbSet<OrderDetail> OrderDetails { get; set; }
}
}
client使用:
传入配置的数据库连接字符串名称:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace CodeFirst
{
class Program
{
static void Main(string[] args)
{
using (var ctx = new OrderContext("CodeFirstDb"))
{
var o = new Order();
o.OrderDate = DateTime.Now;
ctx.Orders.Add(o);
ctx.SaveChanges();
var query = from order in ctx.Orders
select order;
foreach (var q in query)
{
Console.WriteLine("OrderId:{0},OrderDate:{1}", q.Id, q.OrderDate);
}
Console.Read();
}
}
}
}
运行结果:
运行之后就会发如今server上多了一个“CodeFirstDb”数据库:
三种模型的比較:
上图很清晰的描写叙述了,三种模式的适用环境以及各自的特性,关于这三种方式并没有什么优劣,在应用的时候考虑项目本身的情况决定就可以。但值得一说的是CodeFirst的特性:运行时自己主动创建数据库。这一特性恰恰能够满足互联网软件多租户(云)的须要。兴许博客中会详细说明。
EF学习和使用(三)Code First的更多相关文章
- Entity Framework 学习系列(3) - MySql Code First 开发方式+数据迁移
目录 # 写在前面 一.开发环境 二.创建项目 三.安装程序包 四.创建模型 五.连接字符串 六.编辑程序 七.数据迁移 写在最后 # 写在前面 这几天,一直都在学习Entity Framework ...
- 小菜学习设计模式(三)—工厂方法(Factory Method)模式
前言 设计模式目录: 小菜学习设计模式(一)—模板方法(Template)模式 小菜学习设计模式(二)—单例(Singleton)模式 小菜学习设计模式(三)—工厂方法(Factory Method) ...
- X-Cart 学习笔记(三)X-Cart框架2
目录 X-Cart 学习笔记(一)了解和安装X-Cart X-Cart 学习笔记(二)X-Cart框架1 X-Cart 学习笔记(三)X-Cart框架2 X-Cart 学习笔记(四)常见操作 3.了解 ...
- .NET Remoting学习笔记(三)信道
目录 .NET Remoting学习笔记(一)概念 .NET Remoting学习笔记(二)激活方式 .NET Remoting学习笔记(三)信道 参考:♂风车车.Net .NET Framework ...
- EF学习笔记(十二):EF高级应用场景
学习总目录:ASP.NET MVC5 及 EF6 学习笔记 - (目录整理) 上篇链接:EF学习笔记(十一):实施继承 本篇原文链接:Advanced Entity Framework Scenari ...
- EF学习笔记(九):异步处理和存储过程
总目录:ASP.NET MVC5 及 EF6 学习笔记 - (目录整理) 上一篇:EF学习笔记(八):更新关联数据 本篇原文:Async and Stored Procedures 为何要采用异步? ...
- EF学习和使用综合
一.(引)你必须知道的EF知识和经验 二.(引)EF学习和使用(七)EF性能优化篇 三.(引)采用EntityFramework.Extended 对EF进行扩展(Entity Framework 延 ...
- The Road to learn React书籍学习笔记(第三章)
The Road to learn React书籍学习笔记(第三章) 代码详情 声明周期方法 通过之前的学习,可以了解到ES6 类组件中的生命周期方法 constructor() 和 render() ...
- sql server 关于表中只增标识问题 C# 实现自动化打开和关闭可执行文件(或 关闭停止与系统交互的可执行文件) ajaxfileupload插件上传图片功能,用MVC和aspx做后台各写了一个案例 将小写阿拉伯数字转换成大写的汉字, C# WinForm 中英文实现, 国际化实现的简单方法 ASP.NET Core 2 学习笔记(六)ASP.NET Core 2 学习笔记(三)
sql server 关于表中只增标识问题 由于我们系统时间用的过长,数据量大,设计是采用自增ID 我们插入数据的时候把ID也写进去,我们可以采用 关闭和开启自增标识 没有关闭的时候 ,提示一下错 ...
- JavaWeb和WebGIS学习笔记(三)——GeoServer 发布shp数据地图
系列链接: Java web与web gis学习笔记(一)--Tomcat环境搭建 Java web与web gis学习笔记(二)--百度地图API调用 JavaWeb和WebGIS学习笔记(三)-- ...
随机推荐
- 记录一次eclipse的错误:“server tomcat v7.0 server at localhost was unable to start within 45 seconds”的问题解决思路
如果配到上述问题,可以参考网上查找的方法,如下: http://stackoverflow.com/questions/6468520/server-tomcat-v6-0-server-at-loc ...
- linux下crontab使用笔记
1. 安装 service crond status yum install vixie-cron yum install crontabs 2. 实例 每分钟 ...
- Linux中运行c程序,与系统打交道
例一:system系统调用是为了方便调用外部程序,执行完毕后返回调用进程. #include <stdio.h> #include <stdlib.h> main() { pr ...
- JSBridge深度剖析
概述 做过混合开发的人都知道Ionic和PhoneGap之类的框架,这些框架在web基础上包装一层Native.然后通过Bridge技术的js调用本地的库. 在讲JSBridge技术之前.我们来看一下 ...
- 对Date的扩展,将 Date 转化为指定格式的String
<script language="javascript" type="text/javascript"><!-- /** * 对Date的扩 ...
- 设计模式之MVC设计模式初阶
MVC M:Model(数据) V:View(界面) C:Control(控制) 1⃣️Control可以直接访问View和Model 2⃣️View不可以拥有Control和Model属性,降低耦合 ...
- C#实现多级子目录Zip压缩解压实例 NET4.6下的UTC时间转换 [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了 asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程 asp.net core异步进行新增操作并且需要判断某些字段是否重复的三种解决方案 .NET Core开发日志
C#实现多级子目录Zip压缩解压实例 参考 https://blog.csdn.net/lki_suidongdong/article/details/20942977 重点: 实现多级子目录的压缩, ...
- EMI-CLK信号串电阻并电容
一般DMIC的CLK都会EMI超标,所以看到的案子这个DMIC CLK信号都会源端串接电阻和并电容 1,串电阻是为了信号的完整性,考虑到匹配的,一般说来这个电阻不是固定的,要随实际的PCB的走线的阻抗 ...
- 【Wechall.net挑战】Anderson Application Auditing
Wechall.net是一个国外用于练习CTF和攻防的网站,国内资料writeup不多,只有个别几篇.作为小白,近日玩了几道有意思的题目,在此分享 题目地址:http://www.wechall.ne ...
- jquery,smarty,dedecms的插件思路------dede未实践
1.jquery定义一个新函数,这个函数可以使用jquey的所有功能 2.smarty,dede其实也和jquery一样,不过是可以使用系统的一些方法而已 3.可能还有一些规范,如smarty插件的命 ...