本文转自:

http://ynrs5566.blog.163.com/blog/static/183815438201141252428256/

.NET 的实体框架越来越完善了,前几天看到Entity Framework 4.1已经正式发布了,新添加了一种称为Code First的开发模式。字面上的意思就是代码优先;按照微软对于它的说明就是:Code First聚焦于定义你的model类,这些类可以映射到一个现有的数据库,或者根据这些类生成数据库,并且提供了数据注解功能和一个易用的API。

下面将对如何使用这种开发模式做一个简单的说明:

准备:您需要已经安装VS2010以及Entity Framework 4.1

1、新建项目或网站

无论是网站,还是项目都可以使用Code First的开发模式。

2、添加类库引用

EntityFramework

System.Data.Entity

System.ComponentModel.DataAnnotations

3、编写Model类

如果是网站需要把代码写到App_Code文件夹下才能够被编译执行。

public class Category

{

[StringLength(50)]

[Column(TypeName = "varchar")]

public string CategoryId { get; set; }

[StringLength(20)]

[Column("CategoryName", TypeName = "nvarchar")]

public string Name { get; set; }

public virtual ICollection<Product> Products { get; set; }

}

public class Product

{

[Key]

public int ProductId { get; set; }

[StringLength(100)]

[Column("ProductName", TypeName = "nvarchar")]

public string Name { get; set; }

[StringLength(50)]

public string CategoryId { get; set; }

public virtual Category Category { get; set; }

}

public class Supplier

{

[Key]

[StringLength(36)]

public string SupplierCode { get; set; }

[StringLength(100)]

[Column("SupplierName", TypeName = "nvarchar")]

public string Name { get; set; }

public DateTime AddTime { get; set; }

}

这些Model类和我们平常用的没什么两样,不需要任何基类,只不过增加了一些属性注解来做持久化映射。

这些属性定义在System.ComponentModel.DataAnnotations中,比如:Column用于映射数据表中的字段(字段名、字段类型等)。

如果我们不添加这些映射,则框架会按照惯例进行相关的映射处理,开发者不需要做什么显示配置。

关于这些属性可以参考:http://msdn.microsoft.com/en-us/library/dd901590(v=vs.95).aspx

EF4.1中支持的包括如下属性:

KeyAttribute  主键

StringLengthAttribute  字符串长度

MaxLengthAttribute 最大长度

ConcurrencyCheckAttribute

RequiredAttribute  必需

TimestampAttribute 时间戳

ComplexTypeAttribute 复合类型

ColumnAttribute  映射列:column name, ordinal & data type

TableAttribute 映射表:name 和schema

InversePropertyAttribute

ForeignKeyAttribute 外键

DatabaseGeneratedAttribute

NotMappedAttribute 在数据库中排除

4、创建DbContext

继承DbContext,为上边创建的Model添加数据集。

public class ProductContext : DbContext

{

public DbSet<Category> Categories { get; set; }

public DbSet<Product> Products { get; set; }

public DbSet<Supplier> Suppliers { get; set; }

}

这可以理解成一个数据操作类,而且DbContext提供了一些方法很不错,如Find可以根据主键查找数据。

5、添加数据库连接字符串

<connectionStrings>

<add

name="ProductContext"

providerName="System.Data.SqlClient"

connectionString="Server=192.168.100.100;Database=ProductContext;User ID=sa;Password=sa;Trusted_Connection=False;Persist Security Info=True "/>

</connectionStrings>

注意这个数据连接的名称要和继承自DbContext的类的名称一致,数据库ProductContext在SQLServer中尚未创建。

6、编写数据处理

<%@ Page Language="C#" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">

<title></title>

</head>

<body>

<form id="form1" runat="server">

<div>

1、添加数据<br />

Category Name:<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>

<br />

<br />

<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="添 加"/>

<br />

<br />

2、查询数据<br />

<br />

<asp:Button ID="Button2" runat="server" Text="查 询" OnClick="Button2_Click"/>

<br />

<asp:Repeater ID="Repeater1" runat="server">

<ItemTemplate>

<%# eval_r("CategoryId") %>&nbsp;&nbsp;<%# eval_r("Name") %><br />

</ItemTemplate>

</asp:Repeater>

</div>

</form>

</body>

</html>

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Data.Entity;

using System.Collections;

public partial class _Default : System.Web.UI.Page

{

protected void Page_Load(object sender, EventArgs e)

{

}

protected void Button1_Click(object sender, EventArgs e)

{

using (ProductContext db = new ProductContext())

{

Category c = new Category()

{

CategoryId = Guid.NewGuid().ToString(),

Name = TextBox1.Text

};

db.Categories.Add(c);

db.SaveChanges();

}

}

protected void Button2_Click(object sender, EventArgs e)

{

using (ProductContext db = new ProductContext())

{

IQueryable<Category> rs = from c in db.Categories

select c;

Repeater1.DataSource = rs.ToList();

Repeater1.DataBind();

}

}

}

有两个数据操作,添加数据和查询数据。

在执行数据操作的时候, 如果数据库不存在则程序首先创建数据库,再进行数据操作。默认的情况下,如果数据库已经存在,则不执行更新数据库结构的操作。

但是我们有时候更改了Model类,希望能够同步到数据库中。

完美的实现方式就是我们改了某个字段或者某个表,数据库中只更新相应的部分就行了。但是这一想法没有在这个版本中实现。

微软提供的是如果发现Model类有变化,则重新创建数据库。微软的方法无疑会将我们的测试数据清理掉,还好我们可以在初始化的过程中添加测试数据,这样每次重新创建数据库的时候,测试数据就会自动加进去了,算是解决了一些问题。

转载于:https://www.cnblogs.com/quietwalk/archive/2011/07/02/2096302.html

Entity Framework 4.1(转)相关推荐

  1. EF-Entity Framework 相关技术点收集贴

    不定期.偶尔.添加更新 在网络上看到或者自己开发过程中碰到的EF-Entity Framework相关技术点 本文地址:http://www.cnblogs.com/vnii/archive/2012 ...

  2. C#综合揭秘——Entity Framework 并发处理详解

    引言 在软件开发过程中,并发控制是确保及时纠正由并发操作导致的错误的一种机制.从 ADO.NET 到 LINQ to SQL 再到如今的 ADO.NET Entity Framework,.NET 都 ...

  3. 《你必须掌握的Entity Framework 6.x与Core 2.0》正式出版感想

    前言 借书正式出版之际,完整回顾下从写博客到写书整个历程,也算是对自己近三年在技术上的一个总结,整个历程可通过三个万万没想到来概括,请耐心阅读. 写博.写书完整历程回顾 从2013年12月注册博客园账 ...

  4. Entity Framework Code First在Oracle下的伪实现

    为什么要说是伪实现,因为还做不到类似MsSql中那样完全的功能.Oralce中的数据库还是要我们自己手动去创建的.这里,我们舍掉了Model First中的EDMX文件,自己在代码里面写模型与映射关系 ...

  5. Entity Framework:Code-First Tutorial开篇

    这个系列文章是关于Entity Framework Code-First的英文系列文章,内容不错,每篇一个主题知识点介绍,特转载过来 原文地址:http://www.entityframeworktu ...

  6. entity framework 使用Mysql配置文件

    2019独角兽企业重金招聘Python工程师标准>>> <?xml version="1.0" encoding="utf-8"?> ...

  7. Entity Framework CodeFirst数据迁移

    原文:Entity Framework CodeFirst数据迁移 前言 紧接着前面一篇博文Entity Framework CodeFirst尝试. 我们知道无论是"Database Fi ...

  8. 看看Entity Framework 4生成的复杂的分页SQL语句

    之前发现Entity Framework 4生成的COUNT查询语句问题,今天又发现它生成的分页SQL语句问题,而LINQ to SQL却不存在这个问题. >>> 来看一看,瞧一瞧! ...

  9. Entity Framework的启动速度优化

    最近开发的服务放到IIS上寄宿之后,遇到一些现象,比如刚部署之后,第一次启动很慢:程序放置一会儿,再次请求也会比较慢.比如第一个问题,可以解释为初次请求某一个服务的时候,需要把程序集加载到内存中可能比 ...

  10. 主攻ASP.NET.4.5 MVC4.0之重生:Entity Framework生成实体类步骤(十三)

    1.新建一个ASP.NET MVC 4.0 项目 2.安装Entity Framework Power Tools 3.Entity Framework- -RepositoryReverse Eng ...

最新文章

  1. python 重载_python模块重载的五种方法
  2. 1.9 Java 9增强的自动资源管理
  3. rtsp服务器搭建_直播系统搭建所用到的技术原理
  4. [html] HTML5的video怎样预加载(支持全量加载)?
  5. 电脑怎么远程控制另一台电脑_如何用手机远程控制电脑?
  6. Codeforces Round #519 by Botan Investments翻车记
  7. JAVA 服务端模拟客户端请求http/https
  8. 如何开通支付宝小程序助手?
  9. 台式计算机硬盘主要有哪两种接口,硬盘接口有几种?怎么看电脑硬盘接口类型...
  10. UVM-phase机制
  11. 第一行代码-第二版(郭霖著)笔记(初识Android)
  12. 好好说话之Tcache Attack(2):tcache dup与tcache house of spirit
  13. android 4.4 短信拦截,Android 4.4 KitKat升级率已经接近18%
  14. 如何从一个XtraBackup完整备份中恢复一个InnoDB表
  15. python 中numpy.randon.seed()方法的理解和应用
  16. grep 忽略大小写、忽略grep命令本身
  17. 从零开始学五线谱_从零开始学简谱(快速入门)
  18. Tobii pro lab学习笔记1
  19. PoE供电交换机的五大优势详解
  20. 龙场悟道,王阳明悟到了什么?

热门文章

  1. 【若依(ruoyi)】table定制列宽
  2. ORACLE查询表数据占用存储空间大小
  3. shiro session 设置取不到_SpringCloud+shiro+前后端分离
  4. oracle变量绑定代码,Oracle 绑定变量
  5. pythoncgi模块文档_python使用cgi模块处理表单
  6. flink 写入到es_《从0到1学习Flink》—— Flink 写入数据到 Kafka
  7. openstack swift middleware开发
  8. 就是现在!2020 求职加薪手册,人手一份!
  9. python selenium 等待页面加载_python selenium 三种等待方式详解(实战常用)
  10. python 类装饰器和函数装饰器区别_python进阶之装饰器之4在类中定义装饰器,将装饰器定义为类,两者的区别与联系...