第二节:创建模型,使用Code First,配置映射关系(一)

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

创建模型

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

1,实体接口:

2,聚合根接口:

3,值对象接口:

二,模型

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

用户:

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

博客:

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

文章:

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);
    }
}

由于格式原因这里应该是:

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

原文地址:https://www.cnblogs.com/lifeng618/p/9248375.html

时间: 2024-11-05 13:28:33

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

EF使用EntityTypeConfiguration配置映射关系

我们可以定义一个继承自EntityTypeConfiguration<>泛型类的类来定义domain中每个类的数据库配置,我们在这个自定义类的构造函数中使用我们上次提到的那些方法配置数据库的映射. 实体类关系的映射 实体类映射中,关系的映射配置在关系的两端都可以配置.例如,用户信息与登录信息的 一对多 关系可以在用户信息端配置: HasMany(m => m.LoginLogs).WithRequired(n => n.Member); 等效于在登录日志信息端配置: HasRequ

《Java从入门到放弃》入门篇:使用注解的方式配置hibernate映射关系

之前我们都是使用配置文件的方式来生成的代码,虽然和JDBC比较简单了很多,但每次都在修改时需要既改实体类又改映射文件.还是有点麻烦. 所以,这一篇,我们来说说使用注解的方式来在接在实体类上配置映射关系. 第一步:新建一个项目,或者把之前项目中的实体类.映射文件,还有hibernate中的mapping标签都删除,然后在DBBrowser中再次生成实体类.如下图: 红框中的选项就表示直接在POJO上以注解的方式加上映射关系.注意括号内的hibernate版本,必须是3.2及以上的才行. 生成后的实

Detailed Error Information: Module IIS Web Core Notification 未知 Handler 尚未确定 Error Code 0x80070032 配置错误 无法读取配置节“spring”,因为它缺少节声明 配置文件 \\?\d:\用户目录\我的文档\visual studio 2015\Projects\LiS

Detailed Error Information: Module    IIS Web Core Notification    未知 Handler    尚未确定 Error Code    0x80070032 配置错误    无法读取配置节“spring”,因为它缺少节声明 配置文件    \\?\d:\用户目录\我的文档\visual studio 2015\Projects\LiShu\LiShu.WebApp\web.config 没有加载sping 的dll文件

《Entity Framework 6 Recipes》翻译系列 (4) -----第二章 实体数据建模基础之从已存在的数据库创建模型 (转)

不知道对EF感兴趣的并不多,还是我翻译有问题(如果是,恳请你指正),通过前几篇的反馈,阅读这个系列的人不多.不要这事到最后成了吃不讨好的事就麻烦了,废话就到这里,直奔主题. 2-2 从已存在的数据库创建模型 问题 有一个存在的数据库,它拥有表.也许还有视图.外键.你想通过它来创建一个模型. 解决方案 让我们设想,你拥有一个描述诗人(Poet)以及他们的诗(Poem),还有他们之间关系的数据库.如图2-7所示. 图2-7 一个关于诗人及他们的诗的简单数据库 从上图可以看出,一个诗人可能是一首或多首

《Entity Framework 6 Recipes》中文翻译系列 (6) -----第二章 实体数据建模基础之使用Code First建模自引用关系 (转)

2-5 使用Code First建模自引用关系 问题 你的数据库中一张自引用的表,你想使用Code First 将其建模成一个包含自关联的实体. 解决方案 我们假设你有如图2-14所示的数据库关系图的自引用表. 图2-14 一张自引用表 按下面的步骤为这张自引用的表及关系建模: 1.在项目中创建一个继承至DbContext上下文的类EF6RecipesContext. 2.使用代码清单2-5创建一个PictureCategoryPOCO(简单CLR对象)实体. 代码单清2-5 创建一个POCO实

MVC3+EF4.1学习系列(一)-------创建EF4.1 code first的第一个实例

基于EF4.1 code first 简单的CRUD  园子中已经有很多了 ~~ 真不想再写这个了 可是为了做一个完整的小demo 从开始 到后面的一些简单重构 还是决定认真把这个写出来 争取写些别人没写到的东西~~ 好了 开始~~ 这次要做的是个学校管理的demo(通俗些) 先建一个MVC3的应用程序  因为我们是code first 所以 开始创建实体类 一.创建Model 学生和学生成绩登记表是一对多的关系  一个学生可以有多次登记 (因为有多个课程)  一个课程也可以有多个登记   可以

《ASP.NET MVC 5 破境之道》:第一境 ASP.Net MVC5项目初探 &mdash; 第二节:MVC5项目结构

第一境 ASP.Net MVC5项目初探 第一节:运行第一个MVC5项目 第二节:MVC5项目结构 第三节:View层简单改造 第四节:打造首页面 第二节:MVC5项目结构 接下来,我们来看看,VS为我们自动创建的项目,是什么样子的? 可以通过菜单中[View]->[Solution Explorer]项来打开解决方案资源管理器.这是一个树形结构的视图,根节点是解决方案,解决方案节点下,就是一个一个的项目了,目前,我们的解决方案里只有一个项目(HonorShop.Web). 接下来,展开(Hon

activiti自定义流程之整合(三):整合自定义表单创建模型

本来在创建了表单之后应该是表单列表和预览功能,但是我看了看整合的代码,和之前没有用angularjs的基本没有什么变化,一些极小的变动也只是基于angularjs的语法,因此完全可以参考之前说些的表单列表展示相关的内容,这里也就直接进入到下一个步骤,创建流程模型了. 在之前的创建流程模型一节里,我讲代码比较多,实际上在这里还有很重要的一个环节没有细说,那就是自定义流程图,画流程图的过程也是有不少需要注意的事项的,在这一节我会适当的以截图加解释进行说明. 而在创建流程模型的过程中,因为之前也是用j

Centos7 Openstack - (第二节)添加认证服务(Keystone)

Centos7 install Openstack - (第二节)添加认证服务(Keystone) 我的blog地址:http://www.cnblogs.com/caoguo 根据openstack官方文档配置 官方文档地址: http://docs.openstack.org/juno/install-guide/install/yum/content/# 0x01.认证服务安装与配置(控制节点) [[email protected] ~]# mysql -uroot -p MariaDB