第二章(1)创建一个简单的模型

  • 问题:

           你有一个全新的项目,需要创建一个只有一个实体的模型。

  • 解决办法:

 假设你想要创建一个保存联系人名字和手机号的程序。为了让事情简单点,假设你只需要一个叫Person的实体。

按照下面的步骤,就可以创建一个新的模型:

  1. 在你的项目上右键,选择“添加新项”。
  2. 在所有模版中,选择ADO.NET Entity Data Model.点击添加。如图2-1-1所示。
  3. 在向导中选择空的模型,点击完成。它会自动在空白的设计界面上创建新的概念模型。
  4. 在设计界面(design surface)上右键,选择“添加实体”。
  5. 在实体名中键入Person,勾选Create Key property.用Id作为关键属性。保证Id的属性类型是Int32.点击ok。图2-1-2所示。
  6. 在Person实体顶部右键,选择“添加标量属性”。这样一个新的标量属性就会被添加Person实体里。
  7. 将标量属性重命名为FirstName。再为LastName、MiddleName和PhoneNumber添加标量属性。
  8. 在Id属性上右键,选则属性。在弹出的属性视图中,将StroreGneratedPatten属性设置为Identity。这将ID属性标识为在数据库存储层也会计算的,简单来说就是设置自增Id。

 

图2-1-1

图2-1-2

图2-1-3

现在你就有了一个简单的概念模型。为了能根据这个模型生成数据库,我们还要做下面的几件事:

 

9.我们需要将我们模型的几个属性值改一下,以便更好的管理。同样在设计界面上右键,选择“属性”。图2-1-4描述了这些改变。

将Database Schema Name设为Chapter2

      将Entity Container Name设为“EFRecipesEntities”

10.在设计界面上右键,选择“从模型中生成数据库脚本”(Generate Database Script from Model)。然后选择一个已有的数据库连接或者是创建一个新的。在图2-1-5中,我们选择了新建一个连接。
11. 点击“OK”完成连接设置,在点击“Next”,预览要生成的数据库脚本。只要你一点击"Finish".生成的脚本就会自动添加到你的项目中。如图2-1-6所示。
12. 在查询窗口运行数据库脚本,生成People表。

图2-1-4

图2-1-5

图2-1-6

 

  • 工作原理:

     EF的图形化设计见面(Designer)是一款非常给力的工具,可以创建、修改概念模型、存储模型和映射层,它提供了对双向模型开发的支持。当前版本的Designer支持比较有限的往返造型,当让你能从模型中建数据库,也能根据数据库变化更新模型。
     模型中有一大堆属性会影响生成的存储模型和数据库脚本。不过我们只改变了其中的两个,一个是容器名,这是个ObjectContext的派生类,在整本书中我们都把这个上下文(Context)叫做EFRecipesEntities。另外一个,我们把Schema改成了“Chapter2”。这代表了生成存储模型和数据库脚本的Schema是Chapter2。
     下面的代码,是一个非常简单的创建和插入一个Person实例类型的例子。

Insert and Retrive
           using (var context = new EFRecipesEntities())
            {
                var person = new Person()
                {
                    FirstName = "Robert",
                    MiddleName = "Allen",
                    LastName = "Doe",
                    PhoneNumber = "867-5309"
                };
                context.People.AddObject(person);
                person = new Person()
                {
                    FirstName = "John",
                    MiddleName = "K.",
                    LastName = "Smith",
                    PhoneNumber = "824-3031"
                };
                context.People.AddObject(person);
                person = new Person()
                {
                    FirstName = "Billy",
                    MiddleName = "Albert",
                    LastName = "Minor",
                    PhoneNumber = "907-2212"
                };
                context.People.AddObject(person);
                person = new Person()
                {
                    FirstName = "Kathy",
                    MiddleName = "Anne",
                    LastName = "Ryan",
                    PhoneNumber = "722-0038"
                };
                context.People.AddObject(person);
                context.SaveChanges();
            }
            using (var context = new EFRecipesEntities())
            {
                foreach (var person in context.People)
                {
                    System.Console.WriteLine("{0} {1} {2}, Phone: {3}",
                    person.FirstName, person.MiddleName,
                    person.LastName, person.PhoneNumber);
                }
            }

 

Output
----------------------------------
John K. Smith, Phone: 824-3031
Robert Allen Doe, Phone: 867-5309
Kathy Anne Ryan, Phone: 722-0038
Billy Albert Minor, Phone: 907-2212
----------------------------------

 

 

 

posted @ 2012-08-25 11:21  阿凡迪  阅读(544)  评论(0编辑  收藏  举报