学习EF之CodeFirst一
最近将花点时间学习EF相关知识,通过文章来进行一个完整的学习,Code First是由先有代码后生成数据库;将通过一实例来进行学习;我们简单分为三层,其中DataLibrary为EF上下文处理层,ModelLib为实体层,而MainApplication为主程序层
注意:DataLibrary层、MainApplication层要引用System.Data.Entity和EntityFramework.dll两个,还有一个就是ModelLib层,主程序还要引用DataLibrary层
1:实体层ModelLib两个实体:Home实体,其中一个Home里面有多Person;
using System.Linq;
using System.Text; namespace ModelLib
{
public class Home
{
public int ID { get; set; } public string Address { get; set; } public List<Person> PersonList { get; set; }
}
}
Person实体:
using System.Linq;
using System.Text; namespace ModelLib
{
public class Person
{
public int ID { get; set; } public string Name { set; get; } public string PassWord { get; set; } public int Age { get; set; }
}
}
2:接下EF上下文层,我们通过继承自DbContext,它是在EntityFramework.dll里面的,所以要对它引用才会出现的;基中base("name=MyTestDb")就是配置文件里连接数据库的名称,其实也可以不写的,因为默认就是找配置文件里name和本类名称一致的数据库连接串,它生成的数据库名称就为是:MyDbContextFile;当然也可以像下面我们这种特别指定的name;
using System.Data.Entity;
using ModelLib;
namespace DataLibrary
{
public class MyDbContext : DbContext
{
public MyDbContext()
: base("name=MyTestDb")
{
} public DbSet<Person> Person { get; set; } public DbSet<Home> Home { get; set; }
}
}
3:主程序包括配置跟代码两部分;app.config配置:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<add name="MyTestDb" providerName="System.Data.SqlClient" connectionString="Server=.;Database=TestDb;user=sa;pwd=admin"/>
</connectionStrings>
</configuration>
代码如下:
using ModelLib;
using DataLibrary;
using System.Data.Entity;
namespace MainApplication
{
class Program
{
static void Main(string[] args)
{
Database.SetInitializer(new DropCreateDatabaseIfModelChanges<MyDbContext>());
InsertDbInfo();
Console.WriteLine("插入成功");
} private static void InsertDbInfo()
{
List<Person> list=new List<Person>(){
new Person(){ ID=, Name="Wujy", Age=, PassWord=""},
new Person(){ID=, Name="Zyb", Age=, PassWord=""},
new Person(){ID=, Name="Xim", Age=, PassWord=""}
}; var HomeModel = new Home()
{
ID = ,
Address = "厦门市思明区",
PersonList = list
}; using (var context = new MyDbContext())
{
context.Home.Add(HomeModel);
context.SaveChanges();
}
}
}
}
其中代码:Database.SetInitializer(new DropCreateDatabaseIfModelChanges<MyDbContext>());是因为后期我们肯定不停的要修改Model里的实体,所以加这句代码如果实体类有变化,那么重新生成一下数据库,使用这个方法在System.Data.Entity命名空间里
4:查看数据库生成的效果:
注意:表EdmMetadata
EF并不需要EdmMetadata表在你的数据库中。这些表只是为了检测模型类的变化。如果你明白在干什么,你可以随意的删除EF中的EdmMetadata表。一旦你删除EdmMetadata表,你(或者你的数据库管理员)将负责手工同步数据库结构和模型类结构。你可以手工调节保持模型和数据库之间的映射同步。
Entity Framework Code First中映射习惯。
1. 数据库映射:Code First 默认会在本地的SQL Expression数据库中建立一个和DbContext的子类的全名相同的数据库,全名指的是命名空间加上类名。当然后边会介绍怎么进行配置。
2.表映射:Code First 默认会按照类型名复数建立数据表,比如说ProductCatalog类对应的表名就叫ProductCatalogs.后边会介绍如何改变默认的表名。
3.列映射:Code First 默认会按照类中的属性名建立column,它还有默认的数据类型映射习惯,int会映射为interger,string会映射为nvarchar(max),decimal会映射为decimal(18,2)。后边会介绍如何更改column的名称,类型以及其他特性。
4.主键映射:Code First 默认会在类的属性中需找名字为Id或类型名称+Id的int类型的属性作为主键,并且是自增字段。这些也是可以改的。
最新文章
- .Net组件程序设计之异步调用
- Asp.net_完美设置页面最小宽度(兼容ie)
- 使用SignalR为FineUI/Webform打造消息总线
- 如何用Ajax实现地址栏省市级联动(数据库表数据源)
- 【转】Xcode中的iOS模拟器(iOS Simulator)的介绍和使用心得
- Fixflow引擎解析(四)(模型) - 通过EMF扩展BPMN2.0元素
- Java根据ip地址获取Mac地址,Java获取Mac地址
- Linux系统下Memcached的安装以及自启动
- OpenCV学习 1:OpenCV安装与第一个图像显示程序
- Netty那点事: 概述, Netty中的buffer, Channel与Pipeline
- struts2.1.6教程六、使用标签
- 开涛spring3(4.4) - 资源 之 4.4 Resource通配符路径
- python 生产者 --- 消费者
- (办公)Mysql入门
- mysql 数据库的主从同步
- 无法加载DLL";***.dll";:找不到指定的模块
- IDEA 创建HDFS项目 JAVA api
- mysql的第一个程序
- 电力项目十七--数据字典首页JS添加和删除表格
- 图的基础---关键路径理解和实现(Java)
热门文章
- 洛谷——P2908 [USACO08OPEN]文字的力量Word Power
- shell 读配置文件
- 背包系列练习及总结(hud 2602 &;&; hdu 2844 Coins &;&; hdu 2159 &;&; poj 1170 Shopping Offers &;&; hdu 3092 Least common multiple &;&; poj 1015 Jury Compromise)
- 【最大权闭合子图】BZOJ1497[NOI2006]-最大获利
- 找出最小元素的下标 Exercise07_10
- Hiho---欧拉图
- Inno Setup入门(二十)——Inno Setup类参考(6)
- 【shiro】报错: If the controller requires proxying (e.g. due to @Transactional), please use class-based proxying.
- 修改centos7/osx的MAC地址
- static_cast ,reinterpret_cast