以前在使用ADO.NET Entity Framework开发时,碰到过一个问题,Model和数据层不能完全分离。之后在ADO.NET Entity Framework 4中又有了ModelFirst模式,现在在ADO.NET Entity Framework Feature中又增加了CodeFirst模式。本文介绍通过Model代码生成数据库及从数据库生成Model代码。
从代码生成数据库
既然是CodeFirst,当然需要Code完成后能自动生成数据库了。
1. 添加对EntityFramework和System.Data.Entity的引用。
2. 写一个User类和Group类,User和Group是多对一的关系

2 /// 用户实体类
3 /// </summary>
4 public class User
5 {
6 /// <summary>
7 /// ID
8 /// </summary>
9 public Guid ID { get; set; }
10
11 /// <summary>
12 /// 名字
13 /// </summary>
14 public string Name { get; set; }
15
16 /// <summary>
17 /// 用户组别
18 /// </summary>
19 public virtual Group Group { get; set; }
20 }

2 /// 用户组实体类
3 /// </summary>
4 public class Group
5 {
6 /// <summary>
7 /// ID
8 /// </summary>
9 public Guid ID { get; set; }
10
11 /// <summary>
12 /// 组名
13 /// </summary>
14 public string Name { get; set; }
15
16 /// <summary>
17 /// 用户集合
18 /// </summary>
19 public virtual ICollection<User> Users { get; set; }
20 }
3. 写一个继承自DBContext的类

2 /// 数据上下文
3 /// </summary>
4 public class DataContext : DbContext
5 {
6 /// <summary>
7 /// 用户
8 /// </summary>
9 public DbSet<User> Users { get; set; }
10
11 /// <summary>
12 /// 用户组
13 /// </summary>
14 public DbSet<Group> Groups { get; set; }
15 }
这里我们还可以重写OnModelCreating方法来对数据库的生成做一些设置,如某些列的最大长度等信息。
4. 检查数据库连接字符串
默认的数据库连接字符串将连接到.\SQLEXPRESS实例,这个是可以修改的。一个修改方法是在DataContext的构造函数中修改。如:
2 /// 构造函数
3 /// </summary>
4 public DataContext()
5 : base("EFCodeFirstStartConnectionString")
6 {
7 }
其中EFCodeFirstStartConnectionString是连接字符串的名字
5. 当你对数据库执行操作时,如果它不存在,就会按照Model的代码来创建一个。也可以显式地用代码来创建。
或
从数据库生成代码
如果已经有数据库了也不必完全手写Model代码。
1. 新建一个ADO.NET Entity Data Model
2. 选择Generate from database
3. 选择需要生成代码的表
4. 右键单击emdx文件并选择Add Code Generation Item
5. 在弹出的Add New Item对话框中选择ADO.NET DbContext Generator
6. 在Solution Explorer中可以找到模版文件和生成的代码文件
示例下载(Visual Studio 2010)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
2010-01-22 在 Visual Studio 2008 中使用本地 Subversion 库