这一节,实现模型的创建,配置映射关系 使用Code First数据迁移。

创建模型

一,首先创建几个接口:实体接口,聚合根接口,值对象接口

1,实体接口:

![](https://images2018.cnblogs.com/blog/1297333/201806/1297333-20180630190243508-1465071293.png)

2,聚合根接口:

![](https://images2018.cnblogs.com/blog/1297333/201806/1297333-20180630190447629-1515198679.png)

3,值对象接口:

![](https://images2018.cnblogs.com/blog/1297333/201806/1297333-20180630190524322-569928818.png)

二,模型

这里我们的业务场景是:一个用户可以创建一个博客,在博客中可以写多篇文章,一篇文章只能有一个评论,(练习配置映射关系)由于格式的原因我移除了注释信息
用户:

public class UserInfo: IAggregationRoot
{
#region 用户实体
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]//添加时自动增长
public int Id { get; set; }
public string UserName { get;private set; }
public string UserPwd { get; private set; }
public Address UserAddr { get; private set; }
public string Phone { get; private set; }
public string CreateTime { get; private set; }
public List UserRoleInfo { get; set; }
#endregion
public UserInfo(string userName,string userPwd, Address userAddr,string phone)
{
if (!string.IsNullOrEmpty(userName))
{
throw new ArgumentException("客户姓名不能为空!");
}
this.UserName = userName;
this.UserAddr = userAddr;
this.UserPwd = userPwd;
this.Phone = phone;
this.CreateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
}
public UserInfo CreateUser(string userName, string userPwd, Address userAddr, string phone)
{
return new UserInfo(userName,userPwd,userAddr,phone);
}
}

博客:

public class BlogInfo:IAggregationRoot
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public string BolgName { get;private set; }
public string BolgUrl { get; set; }
public string BolgCrateDate { get;private set; }
public string BolgStatus { get;private set; }
public int UserId { get;private set; }
public virtual List BlogPostList { get; set; }
}

文章:

public class BlogPostInfo
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public string ArticleTitleName { get;private set; }
public string ArticlePostCount { get;private set; }
public string ArticleStatus { get;private set; }
public int ReadNum { get;private set; }
public string ArticleCrateDate { get;private set; }
public int BlogId { get;private set; }
//[ForeignKey("BlogId")]
public virtual BlogInfo BolgInfo { get; set; }
public virtual ArticleReviewsInfo ArticleReviewsInfo { get; set; }
}

文章评论:

public class ArticleReviewsInfo : IAggregationRoot
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
//[ForeignKey("BlogPostInfo")]
public int Id { get; set;}
public string ArticleReviewCount { get;private set; }
public string ArticleReviewTime { get;private set; }
public string ArticleCommentatorId { get;private set; }
public string ArticleCommentatorName { get;private set; }
public BlogPostInfo BlogPostInfo { get; set; }
}

三,使用 Code First,配置映射关系

1,引入Nuget EntityFramework
2,定义MyContext类继承DbContext
3,读取数据库 Web.config中 connectionStrings的配置,数据库连接字符串
4,添加 public DbSet UserInfo Name { get; set; } UserInfo要添加的实体,Name 取的名称
5,配置映射关系 ,有2种方式可以配置,Data Annotation和Fluent API
6, Code First 数据迁移 主要使用的数据迁移的命令:Enable-Migrations Add-Migration 迁移名称 Update-Database Add-Migration InitialCreate -IgnoreChanges
首先先谢谢 libingql,田园的蟋蟀的分享 写的非常的详细,非常的好 。
libingql:http://www.cnblogs.com/libingql/p/3352058.html 配置映射关系
田园的蟋蟀:http://www.cnblogs.com/xishuai/p/3632304.html Code First 数据迁移的所有使用步骤
代码

public class MyContext: DbContext
{
//读取数据库Web.config connectionStrings的配置
private static readonly string SqlConnectionString = WebConfigurationManager.ConnectionStrings["sqlConnectionString"].ToString();
public MyContext() : base(SqlConnectionString)
{
// 禁用延迟加载
//this.Configuration.LazyLoadingEnabled = false;
}
public DbSet UserInfo UserInfo { get; set; }
public DbSet RoleInfo RoleInfo { get; set; }
public DbSet UserRoleInfo UserRoleInfo { get; set; }
public DbSet BlogPostInfo BlogPost { get; set; }
public DbSet BlogInfo BlogInfo { get; set; }
public DbSet ArticleReviewsInfo ArticleReviewsInfo { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{

        //值对象的配置
modelBuilder.ComplexType<Address>().Property(e => e.AddrProvince).HasColumnName("AddrProvince").HasMaxLength(100);
modelBuilder.ComplexType<Address>().Property(e => e.AddrCity).HasColumnName("AddrCity").HasMaxLength(100);
modelBuilder.ComplexType<Address>().Property(e => e.AddrCounty).HasColumnName("AddrCounty").HasMaxLength(100);
modelBuilder.ComplexType<Address>().Property(e => e.AddressDetails).HasColumnName("AddressDetails").HasMaxLength(1000);
// 禁用默认表名复数形式
//modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
//配置UserInfo
//modelBuilder.Configurations.Add(new UserMap());
//一对多的关系
modelBuilder.Entity<BlogInfo>().HasMany(e => e.BlogPostList).WithRequired(e => e.BolgInfo)
.HasForeignKey(e => e.BlogId);
modelBuilder.Entity<BlogPostInfo>().HasRequired(e => e.BolgInfo).WithMany(e => e.BlogPostList)
.HasForeignKey(e => e.BlogId);
//一对一的关系
modelBuilder.Entity<ArticleReviewsInfo>().HasRequired(t => t.BlogPostInfo)
.WithRequiredDependent(t => t.ArticleReviewsInfo);
//多对多的关系
modelBuilder.Entity<UserRoleInfo>().HasRequired(e => e.UserInfo).WithMany(e => e.UserRoleInfo)
.HasForeignKey(e => e.UserId);
modelBuilder.Entity<UserRoleInfo>().HasRequired(e => e.RoleInfo).WithMany(e => e.UserRoleInfo)
.HasForeignKey(e => e.RoleId);
}
}


由于格式原因这里应该是:
![](https://images2018.cnblogs.com/blog/1297333/201807/1297333-20180701142759381-870211744.png)

映射关系配置完成后,使用数据迁移请看: 田园的蟋蟀:http://www.cnblogs.com/xishuai/p/3632304.html Code First 数据迁移的所有使用步骤

第二节:创建模型,使用Code First,配置映射关系的更多相关文章

  1. C# 数据操作系列 - 6 EF Core 配置映射关系

    0. 前言 在<C# 数据操作系列 - 5. EF Core 入门>篇中,我们简单的通过两个类演示了一下EF增删改查等功能.细心的小伙伴可能看了生成的DDL SQL 语句,在里面发现了些端 ...

  2. 第二节:模型(Models)和管理后台(Admin site)

    本节内容我们将配置数据库,创建第一个model并且快速了解Django自动生成的管理后台(admin site) 目录 数据库配置 创建模型 激活模型 使用Django API 介绍Django管理后 ...

  3. EF使用Fluent API配置映射关系

    定义一个继承自EntityTypeConfiguration<>泛型类的类来定义domain中每个类的数据库配置,在这个自定义类的构造函数中使用我们上次提到的那些方法配置数据库的映射. 映 ...

  4. Hibernate--使用xml配置映射关系

    写在前面: 配置实体类与数据库的映射关系,有两种方式: 1.使用*.hbm.xml  2.使用@注解 二:xml的配置方式: eg:员工的xml配置文件: <?xml version=" ...

  5. Hibernate--使用注解配置映射关系

    写在前面: 配置实体类与数据库的映射关系,有两种方式: 1.使用*.hbm.xml    :  2.使用@注解 一:注解的方式: 1.@Entity 加在类的前面,将类声明为持久化类. 2.@Tabl ...

  6. VUE2.0实现购物车和地址选配功能学习第二节

    第二节 创建VUE实例 购物车项目计划: 1.创建一个vue实例 2.通过v-for指令渲染产品数据 3.使用filter对金额和图片进行格式化 4.使用v-on实现产品金额动态计算 5.综合演示 ① ...

  7. 使用EF的Code First模式创建模型

    Entity Framework Core Entity Framework (EF) Core 是轻量化.可扩展.开源和跨平台版的常用 Entity Framework 数据访问技术. EF Cor ...

  8. Django——6 模型基础ORM 数据库连接配置 模型的创建与映射 数据的增删改查

    Django Django的ORM简介 数据库连接配置 模型的创建与映射 数据库的增删改查 增数据 查数据及补充 改数据 删数据   Django的ORM系统分析 ORM概念:对象关系映射(Objec ...

  9. django学习-数据库配置-创建模型

    数据库配置 在mysite/settings.py中,包含了django项目设置的python模块 通常,这个配置文件使用SQLite作为默认数据库.如果你不熟悉数据库,或者只是想尝试下django, ...

随机推荐

  1. javascript 事件流的应用之 addEventListener

    原始需求:防止按钮短时间内高频率触发点击事件,由于重复提交导致的业务异常. 图: demo: <!DOCTYPE html> <html lang="en" di ...

  2. “matplotlib display text must have all code points < 128 or use Unicode strings”解决方法

    import sys reload(sys) sys.setdefaultencoding('utf-8') 插入以上代码,便可解决.

  3. Flex + .Net从本地选择一个图片上传到服务器

    <mx:TextInput id="TxtFileName" editable="false" width="200"/> &l ...

  4. Viewer.js 是一款强大的 jQuery 图像浏览插件。

    https://blog.csdn.net/qq_29132907/article/details/80136023 一.效果图  二.代码<!DOCTYPE html><html ...

  5. CSS-尺寸与边框

    1.基础选择器的优先级 权值:标识当前选择器的重要程度,权值越大优先级越高. 元素选择器 1 类选择器 10 伪类选择器 10 ID选择器 100 内联样式 1000 选择器的权值加到一起,大的优先 ...

  6. Gym - 100735E Restore

    E - Restore 题意:输入一个n,输入一个对角线空缺(为0)的n*n的矩阵,要求每一行每一列和对角线的和相同,输出完整的矩阵. 解法:设每一行的和都是sum,用一个h[]数组存每一行的和.则可 ...

  7. hibernate配置文件 连接数据库

    http://jingyan.baidu.com/album/0320e2c1d4dd0b1b87507b38.html?picindex=12

  8. Hadoop3集群搭建之——hive添加自定义函数UDTF (一行输入,多行输出)

    上篇: Hadoop3集群搭建之——虚拟机安装 Hadoop3集群搭建之——安装hadoop,配置环境 Hadoop3集群搭建之——配置ntp服务 Hadoop3集群搭建之——hive安装 Hadoo ...

  9. 2018.12.17 bzoj1406 : [AHOI2007]密码箱(简单数论)

    传送门 简单数论暴力题. 题目简述:要求求出所有满足x2≡1mod&ThinSpace;&ThinSpace;nx^2\equiv1 \mod nx2≡1modn且0≤x<n0\ ...

  10. msyql 主从配置

    vim /etc/mysql/my.cnf; # 以下部分一定要配置在[mysqld]后面 [mysqld] log-bin=mysql-bin server-id= //设置数据库服务器唯一ID,这 ...