以前在使用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)