第二章(1)创建一个简单的模型
- 问题:
你有一个全新的项目,需要创建一个只有一个实体的模型。
- 解决办法:
假设你想要创建一个保存联系人名字和手机号的程序。为了让事情简单点,假设你只需要一个叫Person的实体。
按照下面的步骤,就可以创建一个新的模型:
- 在你的项目上右键,选择“添加新项”。
- 在所有模版中,选择ADO.NET Entity Data Model.点击添加。如图2-1-1所示。
- 在向导中选择空的模型,点击完成。它会自动在空白的设计界面上创建新的概念模型。
- 在设计界面(design surface)上右键,选择“添加实体”。
- 在实体名中键入Person,勾选Create Key property.用Id作为关键属性。保证Id的属性类型是Int32.点击ok。图2-1-2所示。
- 在Person实体顶部右键,选择“添加标量属性”。这样一个新的标量属性就会被添加Person实体里。
- 将标量属性重命名为FirstName。再为LastName、MiddleName和PhoneNumber添加标量属性。
- 在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实例类型的例子。
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); } }
---------------------------------- John K. Smith, Phone: 824-3031 Robert Allen Doe, Phone: 867-5309 Kathy Anne Ryan, Phone: 722-0038 Billy Albert Minor, Phone: 907-2212 ----------------------------------