Entity Framework(五):使用配置伙伴创建数据库
在上一篇文章中讲了如何使用fluent API来创建数据表,不知道你有没有注意到一个问题。上面的OnModelCreating方法中,我们只配置了一个类Product,也许代码不是很多,但也不算很少,如果我们有1000个类怎么办?都写在这一个方法中肯定不好维护。EF提供了另一种方式来解决这个问题,那就是为每个实体类单独创建一个配置类。然后在OnModelCreating方法中调用这些配置伙伴类。
创建Product实体类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Entity.ModelConfiguration; namespace EF配置伙伴.Model
{
public class Product
{
public int ProductNo { get; set; } public string ProductName { get; set; } public double ProductPrice { get; set; }
}
}
创建Product实体类的配置类:ProductMap,配置类需要继承自EntityTypeConfiguration泛型类,EntityTypeConfiguration位于System.Data.Entity.ModelConfiguration命名空间下,ProductMap类如下:
using EF配置伙伴.Model;
using System;
using System.Collections.Generic;
using System.Data.Entity.ModelConfiguration;
using System.Linq;
using System.Text; namespace EF配置伙伴.EDM
{
public class ProductMap :EntityTypeConfiguration<Product>
{
public ProductMap()
{
// 设置生成的表名称
ToTable("ProductConfiguration");
// 设置生成表的主键
this.HasKey(p => p.ProductNo);
// 修改生成的列名
this.Property(p =>p.ProductNo).HasColumnName("Id");
this.Property(p => p.ProductName)
.IsRequired() // 设置 ProductName列是必须的
.HasColumnName("Name"); // 将ProductName映射到数据表的Name列 }
}
}
在数据上下文Context类的OnModelCreating()方法中调用:
using EF配置伙伴.EDM;
using EF配置伙伴.Model;
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Text; namespace EF配置伙伴.EFContext
{
public class Context:DbContext
{
public Context()
: base("DbConnection")
{ } public DbSet<Product> Products { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// 添加Product类的配置类
modelBuilder.Configurations.Add(new ProductMap());
base.OnModelCreating(modelBuilder);
} }
}
查看数据库,可以看到符合我们的更改:
这种写法和使用modelBuilder是几乎一样的,只不过这种方法更好组织处理多个实体。你可以看到上面的语法和写jQuery的链式编程一样,这种方式的链式写法就叫Fluent API。
Entity Framework(五):使用配置伙伴创建数据库的更多相关文章
- 使用Entity Framework通过code first方式创建数据库和数据表
开发环境 WIN10 Entity Framework6.0 MVC5.0 开发工具 VS2015 SqlServer2012 1.创建上下文Context继承DbContext,并创建其他的业 ...
- Entity Framework Codefirst的配置步骤
Entity Framework Codefirst的配置步骤: (1) 安装命令: install-package entityframework (2) 创建实体类,注意virtual关键字在导航 ...
- 关于Entity Framework采用DB First模式创建后的实体批量修改相关属性技巧
Entity Framework采用DB First模式创建实体是比较容易与方便的,修改已创建的实体在个数不多的情况下也是没问题的,但如果已创建的实体比较多,比如10个实体以上,涉及修改的地方比较多的 ...
- Entity Framework 关系约束配置
前言 简单的说一下自己的理解,大家应该都很明白ADO.NET,也就是原生态的数据库操作,直接通过拼接SQL语句,表与表之间通过链接(inner join left join 或者子查询),也就是在 ...
- centos 安装oracle 11g r2(二)-----监听配置与创建数据库实例
centos 安装oracle 11g r2(二)-----监听配置与创建数据库实例 一.监听配置(命令:netca) 1.以 oracle 用户输入命令,启动图形化工具配置监听 [oracle@lo ...
- Entity Framework学习笔记——配置EF
初次使用Entity Framework(以下简称EF),为了避免很快忘记,决定开日志记录学习过程和遇到的问题.因为项目比较小,只会用到EF的一些基本功能,因此先在此处制定一个学习目标:1. 配置EF ...
- Oracle 与 entity framework 6 的配置,文档
官方文档: http://docs.oracle.com/cd/E56485_01/win.121/e55744/intro001.htm#ODPNT123 Oracle 对 微软 实体框架 EF6 ...
- Working with Data » Getting started with ASP.NET Core and Entity Framework Core using Visual Studio » 创建复杂数据模型
Creating a complex data model 创建复杂数据模型 8 of 9 people found this helpful The Contoso University sampl ...
- EF CodeFirst 如何通过配置自动创建数据库<当模型改变时>
最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精 本篇为进阶篇,也是弥补自己之前没搞明白的地方,惭愧 ...
随机推荐
- C#控件一览表
C#控件一览表 .窗体 .常用属性 ()Name属性:用来获取或设置窗体的名称,在应用程序中可通过Name属性来引用窗体. () WindowState属性: 用来获取或设置窗体的窗口状态. 取值有三 ...
- 安装 ibm-java-x86_64-sdk-6.0-9.3.x86_64.rpm 的三步骤
yum install libstdc++-devel.x86_64 yum install compat-libstdc++-33.x86_64 rpm -ivh ibm-java-x86_64-s ...
- 分享六个基于Bootstrap的实用开发教程和模板演示
关于Bootstrap,相信大家一定不陌生,它已经成为现在主流产业的一个重要工具,Bootstrap提供了优雅的HTML和CSS规范,它基于jQuery框架开发的,它在jQuery框架的基础上进行了更 ...
- 我的GTD起步
最初因为工作进程漫无目的的逛网页,私人生活也一团乱麻,无法做自己想要的事情,这才开始接触个人管理和时间管理. 慢慢的也开始建立一套自己的体系,但是和之前改变不是很大,后来看了<小强升职记> ...
- JS生成EXCEL(Chrome浏览器)
直接使用js+Html生成excel文件,当前版本:chrome浏览器 <!DOCTYPE html> <html> <head> <meta charset ...
- ajax local.href不跳转的原因之一
ajax local.href不跳转的原因之一 打开F12发现一直报 next.html is not a function…… 后来发现next少了(),看得我尴尬症都犯了
- android中RecycleView分页原生代码封装,无任何第三方代
概述 RecycleView分页加载封装,简单方便,功能齐全 详细 代码下载:http://www.demodashi.com/demo/13283.html 一.场景: 在项目开发中经常使用到列表集 ...
- 用QQ帐号和新浪微博帐号登录网站
用QQ帐号登录: 先去http://connect.qq.com/intro/login/申请 然后点击验证 将下面代码复制到网站首页中,放进去以后再点击验证就能得到ID和key 第一步:配置 ...
- 【服务器防护】centos iptables 防火墙设置 mac过滤
1.阻止MAC地址为XX:XX:XX:XX:XX:XX主机的所有通信: iptables -A INPUT -s 192.168.1.21 -m mac --mac-source XX:XX:XX:X ...
- int main() 与 int _tmain()
用过C的人都知道每一个C的程序都会有一个main(),但有时看别人写的程序发现主函数不是int main(),而是int _tmain(),而且头文件也不是<iostream.h>而是&l ...