CodeFirst开发方式创建数据库
1)、新建ADO.NET实体数据模型--->选择空CodeFirst模型
2)、新建两个实体类(客户表和订单信息表)
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 CodeFirst开发方式 { [Table("Customer")] public class Customer { public Customer() { this.OrderInfo = new HashSet<OrderInfo>(); } [Key] [Required(ErrorMessage ="*必填")] public int CustomerId { get; set; } [Required(ErrorMessage = "*必填")] public string CustomerName { get; set; } public string CustomerSex { get; set; } [Required(ErrorMessage = "*必填")] public int CustomerAge { get; set; } [Required(ErrorMessage = "*必填")] [StringLength(100,ErrorMessage ="超过最大长度100")] public string Address { get; set; } [Required(ErrorMessage = "*必填")] public string Phone { get; set; } public string Email { get; set; } public virtual ICollection<OrderInfo> OrderInfo { get; set; } } }
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 CodeFirst开发方式 { [Table("OrderInfo")] public class OrderInfo { [Key] [Required(ErrorMessage = "*必填")] public int OrderId { get; set; } [Required(ErrorMessage ="*必填")] public string OrderContent { get; set; } [Required(ErrorMessage = "*必填")] public int CustomerId { get; set; } [Required(ErrorMessage = "*必填")] public virtual Customer Customer { get; set; } } }
3)、修改App.config或Web.config里面的连接字符串
这里name的属性值对象的就是配置文件的连接字符串,将其改成
<add name="DataModel" connectionString="data source=(local);initial catalog=DataModel;persist security info=True;user id=sa;password=123456;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />
4)、在新建的CodeFirst空模型类中需要创建的两张表
public virtual DbSet<Customer> Customer { get; set; }
public virtual DbSet<OrderInfo> OrderInfo { get; set; }
5)、如果需要创建的表的主键ID自增,
重写OnModelCreating方法
protected override void OnModelCreating(DbModelBuilder modelBuilder) { //base.OnModelCreating(modelBuilder); //自增长主键 modelBuilder.Entity<Customer>() .Property(c => c.CustomerId) .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity); modelBuilder.Entity<OrderInfo>() .Property(o => o.OrderId) .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity); }
6)、在Main中
DataModel db = new DataModel(); Customer cust = new Customer { Address = "江西省南昌市瑶湖区", CustomerAge = 19, CustomerName = "张三", CustomerSex = "男", Email = "999999999@qq.com", Phone = "12345678910" }; db.Customer.Add(cust); db.SaveChanges(); Console.WriteLine("~~~~~~~OK~~~~~~~~"); Console.ReadKey();
7)、在过程中遇到的一些问题
7.1)、我在已经生成了数据库的时候,修改这一些代码,(已经有数据库了)又重新的运行了一下代码
异常提示信息:The model backing the 'DataModel' context has changed since the database was created. Consider using......
而经过度娘,这篇博客解决了我的问题
https://blog.csdn.net/hit_why/article/details/72778785
其中的解决方案:
这里我给出一种方案,网上也可以搜到:
1. 打开工具-->NuGet包管理器-->程序包管理器控制台
2.在PM>后面输入Enable-Migrations -ContextTypeName DatabaseName(如果执行失败,就参考失败信信息重新输入,失败信息提示的非常明确;DatabaseName是你生成的数据库名字),然后你发现项目里面增加了一个Migrations文件夹,里面自动生成了一些代码,这些代码试根据你的模型和改变生成的
3. 设置Migrations文件夹下面的Configuration文件中的代码:AutomaticMigrationsEnabled=true;也就是将false改为true
4. 在PM>后面输入Add-Migration InitialCreate
5. 在PM>后面 Update-Database -Verbose 或者Update-Database -Verbose -Force强制改变数据库。
之后每次改变模型时,只需在PM>后面 输入Update-Database -Verbose -Force就可以了。
原文地址:https://www.cnblogs.com/licm/p/11792791.html
- NDK 的开发流程
- 蜜罐背后的影子系统探秘
- Oracle 免费的数据库--Database 快捷版 11g 安装使用与SOD框架对Oracle的CodeFirst支持
- 如何求最小三元组距离
- 如何将Pastebin上的信息应用于安全分析和威胁情报领域
- Optionsbleed 漏洞泄露 Apache Server 的内存信息
- 对两个有序数组进行合并
- No.016 3Sum Closest
- Java中实现解码字符串的方法,实用代码
- PDF.NET SOD 开源框架红包派送活动 && 新手快速入门指引
- No.015 3Sum
- Java 8新特性——提供了一种可以看作多重继承的默认方法
- WebSocket 学习笔记--IE,IOS,Android等设备的兼容性问题与代码实现
- 关于Shell你想知道的都在这儿
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- mongodb----复制
- CentOS磁盘挂载
- Mono for Android 实现高效的导航
- MyBatis版本升级导致OffsetDateTime入参解析异常问题复盘
- elasticSearch学习(二)
- 146. LRU缓存机制 Krains 2020-08-05 12:50:28 链表
- 337. 打家劫舍 III Krains 2020-08-05 10:18:45 动态规划
- 58道Vue常见面试题集锦,涵盖入门到精通,自测 Vue 掌握程度
- 记一次Linux计划任务cron无结果的排查过程
- 一文学会使用 CSS 中的 min(), max(), clamp() 以及它们的使用场景用例
- 5 个 JS 数组技巧可提高你的开发技能
- 一个有意思的方案:不借助后台和 JS ,只用 CSS 让一个列表编号倒序,你会怎么做?
- 关于MySQL LOAD DATA特性的利用与思考
- NHibernate 缓存
- 渗透测试 | 突破前端JS加密限制