65.9K
CodeProject 正在变化。 阅读更多。
Home

实体框架代码优先:让我们尝试一下

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.77/5 (29投票s)

2012年1月21日

CPOL

3分钟阅读

viewsIcon

167454

EF 代码优先:第一次尝试

引言

你听说过实体框架并且想尝试一下。在这里,你可以找到一个非常简单的例子,说明如何使用代码优先创建一个第一个类和从这个类创建第一个表。

Using the Code

我们将创建一个控制台应用程序,添加一个名为Person的类,并从此类生成数据库。打开Visual Studio并创建一个控制台应用程序。我将我的命名为EFFirstSample。现在,你必须允许你的项目使用代码优先。为此,从NuGet包中添加实体框架。打开Visual Studio,转到工具 -> 库包管理器 -> 管理NuGet包并选择EntityFramework包。它将所有引用添加到你的项目。

Add package

添加完成后,检查项目中的引用。应该出现了EntityFramework。你还会看到一个新的文件 *package.config*。此文件包含有关已安装NuGet包的所有信息。好的,现在我们可以开始我们的项目了。我们首先添加一个新的类文件,*Person.cs*,并声明四个属性:ID、姓氏、名字和出生日期,如下所示

public class Person
{
    public int PersonId { get; set; }
    public string LastName { get; set; }
    public string FirstName { get; set; }
    public DateTime BirthDate { get; set; }
}

现在,我们将创建一个类来管理与数据库的连接:我们的DBContext。添加一个新的类 *MyContext.cs* 并让它继承自DbContext类(添加System.Data.Entity作为using

using System.Data.Entity;

namespace EFFirstSample
{
    public class MyContext : DbContext
    {
        public MyContext()
        {}
    }
}

所以现在,我们将告诉上下文应该在数据库中创建什么。添加以下行

public DbSet<Person> Persons { get; set; }

它允许上下文知道它将包含Person对象的集合(以及应该创建一个Person表)。如果我们运行应用程序,什么也不会发生。你可以连接到你的SqlExpress实例进行检查。让我们在我们的Console中添加一些代码来调用我们的上下文。转到Program类并像这样修改它

static void Main(string[] args)
{
    var person = new Person {FirstName = "Nadege", 
    LastName = "Deroussen", BirthDate = DateTime.Now};
    using (var context = new MyContext())
    {
        context.Persons.Add(person);
        context.SaveChanges();
    }
    Console.Write("Person saved !");
    Console.ReadLine();
}

我们只是创建一个新的Person对象并将其添加到数据库。现在,运行应用程序并在关闭前检查消息。

First launch of the application

现在是检查人员是否已成功创建的时候了。连接到SqlExpress并检查是否创建了新的数据库

在工具栏*服务器资源管理器*中,你应该看到一个数据连接节点。如果工具栏不可见,请转到*视图 -> 服务器资源管理器*

Data Connection node in Server Explorer toolbar

右键单击该节点并选择*添加连接*。将出现一个新窗口。添加你的服务器(如果你使用SQL Express,则为*.\SqlExpress*)并在下拉列表中选择你的数据库。这是我的情况

Add Data Connection

测试你的连接并使用“确定”按钮进行验证。你现在应该可以看到你的数据库了。

Screen capture of server explorer showing a table People

你可以看到一个People表和一个EdmMetadata表。第一个表示与你的Person类对应的表。为什么它被命名为People?因为命名约定。EF 代码优先使用复数规则,因此我们的DbSet Persons被重命名为People(复数)。右键单击表名并选择**打开表定义**。你应该看到类似这样的内容

你可以看到PersonId已被创建为主键。这是怎么回事?我们什么也没指定!很简单。代码优先使用命名约定来确定哪个属性应该用作主键。如果你将属性命名为*TableName*Id,代码优先将看到此属性将用于定义主键。非常简单。还有另一种方法可以定义与主键匹配的属性。我们将在以后的文章中介绍。另一个表EdmMetadata存储一个哈希值,这将允许EF检查模型是否已被修改。

你刚刚使用实体框架代码优先创建了你的第一个简单的应用程序。在以后的文章中,我们将看到如何添加具有外键的多个表。

历史

  • 2012年1月:第一篇文章
  • 2012年1月:添加了有关如何连接到数据库的说明
© . All rights reserved.