一、概念

实体拆分:一个实体拆分成多个表,如Product实体,可以拆分成Product和ProductWebInfo两个表,Product表用于存储商品的字符类信息,ProductWebInfo用于存储商品的图片信息,两张表通过SKU进行关联。

1、Product实体类结构:

 using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace 实体拆分.Model
{
public class Product
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)] //设置主键需要自己填充
public int SKU { get; set; }
public string Description { get; set; } public decimal Price { get; set; } public string ImageURL { get; set; }
}
}

2、数据实体类结构:

 using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using 实体拆分.Model; namespace 实体拆分.DatabaseContext
{
public class EFDbContext :DbContext
{
public EFDbContext()
: base("name=Default")
{ } public DbSet<Product> Products { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Product>().Map(p =>
{
p.Properties(m => new { m.SKU, m.Price, m.Description });
p.ToTable("Product");
})
.Map(p =>
{
p.Properties(m => new { m.SKU, m.ImageURL });
p.ToTable("ProductWebInfo");
}); base.OnModelCreating(modelBuilder);
}
}
}

3、使用数据迁移生成数据库,生成后的表结构如下图所示:

4、测试数据:

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using 实体拆分.DatabaseContext; namespace 实体拆分
{
class Program
{
static void Main(string[] args)
{
using (var context = new EFDbContext())
{
context.Products.Add(new Model.Product() {
SKU=,
Description="C#高级编程(第10版)",
Price= ,
ImageURL="http://image.baidu.com/1.jpg"
});
// 保存
context.SaveChanges();
} Console.WriteLine("创建成功");
Console.ReadKey();
}
}
}

5、运行程序,查询数据库结果

总结将实体拆分成多表的步骤:

1、在工程中创建一个新类继承自DbContext类。
2、创建Product的POCO类。
3、在新创建的DbContext子类中添加属性:DbSet<Product>。
4、重写DbContext类的OnModelCreating()方法。

代码地址:https://files.cnblogs.com/files/dotnet261010/%E5%AE%9E%E4%BD%93%E6%8B%86%E5%88%86.rar。

Entity Framework实体拆分的更多相关文章

  1. Entity Framework 实体框架的形成之旅--实体数据模型 (EDM)的处理(4)

    在前面几篇关于Entity Framework 实体框架的介绍里面,已经逐步对整个框架进行了一步步的演化,以期达到统一.高效.可重用性等目的,本文继续探讨基于泛型的仓储模式实体框架方面的改进优化,使我 ...

  2. Entity Framework 实体框架的形成之旅--实体框架的开发的几个经验总结

    在前阵子,我对实体框架进行了一定的研究,然后把整个学习的过程开了一个系列,以逐步深入的方式解读实体框架的相关技术,期间每每碰到一些新的问题需要潜入研究.本文继续前面的主题介绍,着重从整体性的来总结一下 ...

  3. Entity Framework 实体框架的形成之旅--为基础类库接口增加单元测试,对基类接口进行正确性校验(10)

    本篇介绍Entity Framework 实体框架的文章已经到了第十篇了,对实体框架的各个分层以及基类的封装管理,已经臻于完善,为了方便对基类接口的正确性校验,以及方便对以后完善或扩展接口进行回归测试 ...

  4. Entity Framework 实体框架的形成之旅--几种数据库操作的代码介绍(9)

    本篇主要对常规数据操作的处理和实体框架的处理代码进行对比,以便更容易学习理解实体框架里面,对各种数据库处理技巧,本篇介绍几种数据库操作的代码,包括写入中间表操作.联合中间表获取对象集合.递归操作.设置 ...

  5. Entity Framework 实体框架的形成之旅--界面操作的几个典型的处理(8)

    在上篇随笔<Entity Framework 实体框架的形成之旅--数据传输模型DTO和实体模型Entity的分离与联合>里面,介绍了在Entity Framework 实体框架里面引入了 ...

  6. Entity Framework 实体框架的形成之旅--数据传输模型DTO和实体模型Entity的分离与联合

    在使用Entity Framework 实体框架的时候,我们大多数时候操作的都是实体模型Entity,这个和数据库操作上下文结合,可以利用LINQ等各种方便手段,实现起来非常方便,一切看起来很美好.但 ...

  7. Entity Framework 实体框架的形成之旅--Code First模式中使用 Fluent API 配置(6)

    在前面的随笔<Entity Framework 实体框架的形成之旅--Code First的框架设计(5)>里介绍了基于Code First模式的实体框架的经验,这种方式自动处理出来的模式 ...

  8. Entity Framework 实体框架的形成之旅--Code First的框架设计(5)

    在前面几篇介绍了Entity Framework 实体框架的形成过程,整体框架主要是基于Database First的方式构建,也就是利用EDMX文件的映射关系,构建表与表之间的关系,这种模式弹性好, ...

  9. Entity Framework 实体框架的形成之旅--基类接口的统一和异步操作的实现(3)

    在本系列的第一篇随笔<Entity Framework 实体框架的形成之旅--基于泛型的仓储模式的实体框架(1)>中介绍了Entity Framework 实体框架的一些基础知识,以及构建 ...

随机推荐

  1. Android应用的自动升级、更新模块的实现

    我们看到很多Android应用都具有自动更新功能,用户一键就可以完成软件的升级更新.得益于Android系统的软件包管理和安装机制,这一功能实现起来相当简单,下面我们就来实践一下.首先给出界面效果: ...

  2. Linux GPIO子系统

    一 概述 Linux内核中gpio是最简单,最常用的资源(和 interrupt ,dma,timer一样)驱动程序,应用程序都能够通过相应的接口使用gpio,gpio使用0-MAX_INT之间的整数 ...

  3. Sublime Text 无法使用Package Control或插件安装失败的解决方法

    Sublime Text用了一年多了,公司搬家近期突然发现Package Control无法安装新插件了.尽管不影响原有功能的使用.还是要解决它.因为本人用Windows系统,仅仅讨论Windosw下 ...

  4. TDR,阻抗匹配,反射,源端匹配,终端匹配

    什么是阻抗 阻抗分三种,电阻.电容.电感,三者阻抗表达式如下: 符号 单位 表达式 备注 电阻 R 欧姆 Ω 电压电流相位相同 电容 C 法拉 F 电压相位落后电流90度 电感 L 亨利 H 电压相位 ...

  5. php里面的注解(通过反射获取注解)

    /** * Created by PhpStorm. * User: Administrator * Date: 2018\10\12 0012 * Time: 14:30 */ /** * clas ...

  6. 开源的报表系统easyreport的部署

    https://github.com/xianrendzw/EasyReport/blob/master/docs/manual/version2_0.md

  7. 基于Unity3d 引擎的Android游戏优化

    原文地址:http://blog.csdn.net/jixuguo/article/details/9018669 近期项目进入收尾阶段,之前对项目做了非常多优化,mesh合并 .降低DrawCall ...

  8. sed匹配两种重要思想

    1,sed匹配两种重要思想 屏蔽思想:遮住不想要的 挑出思想:遮住所有,挑出想要的. 2,实例 屏蔽思想: [root@lanny ~]# sed -n '2p' file.txt |sed -r ' ...

  9. Javac编译器

    One Compiler http://www.oracle.com/technetwork/java/jvmls2016-wimmer-3125555.pdf Hacking the OpenJDK ...

  10. SDL2中文教程

    SDL2.0 Tutorial Index 原文地址:SDL 2.0 Tutorial Index Welcome! 下面的教程旨在为你提供一个SDL2.0以及c++中游戏设计和相关概念的介绍.在本教 ...