EF之Code First代码优先
1.前言
通过英文可知,表示的是代码优先,一般创建EF都是先创建数据库,创建根据数据库的EF实体模型,而code - first 则是反过来!。。。
2.代码实战
我们这次创建的不是原来的数据库EF设计器,而是空的Code first 模型。如果说你的项目引用中没有entity framkwork,则需要去nuget程序包中安装ef框架(entity)
创建一个类,这个类就是数据的上下文,它的目录在MVC项目中的Model文件夹,base中的是你所创建的数据库名称,而你创建的表也是在model的这个文件夹中,
using System; using System.Collections.Generic; using System.ComponentModel; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using System.Linq; using System.Web; namespace MyFirstCode.Models { public class Grade { public int GradeID { get; set; } [Required]//必须唯一 [DisplayName("学生姓名")] //列名 [Column("SName")]//数据库中的列名 [StringLength(20)]//字符串长度 public string GradeName { get; set; } } }
using System.ComponentModel; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema;
这是添加字段约束用到的命名空间
接下来看下我们的连接字符串部分:
<connectionStrings> <add name="MyDemoDB" connectionString="server=.;database=MyDemoDB;uid=sa;pwd=sa" providerName="System.Data.SqlClient"/> </connectionStrings>
providerName="System.Data.SqlClient" 这个参数代表的是数据的来源,即来源于该命名空间下,我们也可以写成MySqlClient,当然前提是你引用了MySqlClient,呵呵,这样就对了项目迁移带来了很大的方面.
1对多的关系如何写?
假如有Student 和 Grade两个表 每个年纪有很多学生.
Student.cs:
[ForeignKey("NianJi")] public int GradeID { get; set; } /// <summary> /// virtual 虚拟的。 延迟加载 /// </summary> public virtual Grade NianJi { get; set; }
Grade.cs:
public class Grade { public int GradeID { get; set; } public string GradeName { get; set; } public virtual IList<Student> Students { get; set; } }
结果如图:
多对多的关系怎么写?
列入角色和用户表,每个用户有很多角色即role与user表
User.cs public virtual IList<Role> Roles { get; set; } Role.cs public virtual IList<User> Users { get; set; }
生成完,它会出现一个RoleUser表,这样就达到了多对多的关系.
using (var context = new Model1())
{
context.Database.Initialize(true);
}
对这个上下文进行操作的时候它才会被创建 2018-11-15 21:57:15
分类:
.NET- EF Core
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异