这一节,实现模型的创建,配置映射关系 使用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. vue 设置button disabled

    <button v-bind:disabled="dis" @click="alert">button</button> dis:'' ...

  2. Django 自定义模板标签TemplateTags

    创建自定义的模板标签(template tags) Django提供了以下帮助函数(functions)来允许你以一种简单的方式创建自己的模板标签(template tags): simple_tag ...

  3. HDU 6129 Just do it

    题意:给你一个包含n个数的序列A和一个数m,序列B中的数是序列A经过异或得到的,比如:b[i]=a[1]^a[2]^…..^a[i].现在让你求经过m次异或后,序列B的值.  思路:这题其实和杨辉三角 ...

  4. JSON文件导入Unity3d中是空的的问题

    将Json文件的内容在网上在线的Json文件编辑器导出后再导入即可

  5. python 中 __name__ 的使用

    1. 如果模块是被导入,__name__的值为模块名字2. 如果模块是被直接执行,__name__的值为’__main__’   Py1.py #!/usr/bin/env python def te ...

  6. oracle 查看表空间使用情况

    查看表空间剩余: ||'M' from dba_free_space group by tablespace_name 查看表空间总大小.使用大小.剩余大小,使用率.剩余率 ) useded, tru ...

  7. Win7 VS2013环境编译Squirrel 3.0.7

    Squirrel是一个类似Lua,但是更面向对象的脚本语言. 国内这个介绍很少,环境配置更是没有任何文章提到,花了点时间搞定了,备忘记录下过程. 首先是下载,写本文时Squirrel最新版本为3.0. ...

  8. python3 print函数的用法

    1. 输出字符串 >>> strHello = 'Hello World' >>> print (strHello) Hello World 2. 格式化输出整数 ...

  9. Python-类-dict

    class dict(object): """ dict() -> new empty dictionary dict(mapping) -> new dic ...

  10. 知识点:定义input type=file 样式的方法(转)

    ——“当我们想要用css美化表单的时候,有两个控件就会和前段人员作对,一个是是大名鼎鼎的select,另一个就是我现在要说说的 input type=file” 为什么要美化file控件?试想一下,别 ...