你的位置:首页 > 软件开发 > ASP.net > 《Entity Framework 6 Recipes》翻译系列

《Entity Framework 6 Recipes》翻译系列

发布时间:2015-05-08 12:00:20
不知道对EF感兴趣的并不多,还是我翻译有问题(如果是,恳请你指正),通过前几篇的反馈,阅读这个系列的人不多。不要这事到最后成了吃不讨好的事就麻烦了,废话就到这里,直奔主题。2-2 从已存在的数据库创建模型  问题  有一个存在的数据库,它拥有表、也许还有视图、外键。你想通过它来创 ...

不知道对EF感兴趣的并不多,还是我翻译有问题(如果是,恳请你指正),通过前几篇的反馈,阅读这个系列的人不多。不要这事到最后成了吃不讨好的事就麻烦了,废话就到这里,直奔主题。

2-2 从已存在的数据库创建模型

  问题

  有一个存在的数据库,它拥有表、也许还有视图、外键。你想通过它来创建一个模型。

  解决方案

  让我们设想,你拥有一个描述诗人(Poet)以及他们的诗(Poem),还有他们之间关系的数据库。如图2-7所示。

  《Entity Framework 6 Recipes》翻译系列

  图2-7 一个关于诗人及他们的诗的简单数据库

  从上图可以看出,一个诗人可能是一首或多首诗的作者,每首诗可以按其韵律来分类,韵律是诗句的基本模式。上图未显示数据库中将表连接在一起的视图,它让我们更容易的枚举诗人,诗和韵律。

  按下列步骤,将表、视图以及关系导入到模型:

    1、右键你的项目,选择Add(增加) ➤New Item(新建项)。

    2、选择Visual C#条目下的Data模板下的ADO.NET Entity Data Model(ADO.NET实体数据模型)。

    3、选择Generate from database 从一个已存在的数据库创建模型,点击Next(下一步)。

    4、可以选择一个已存在的数据库连接,也可以选择新建一个数据库连接,如果你选择新建,你将要选择数据库服务器、认证方式(Windwos or SQL Server)以及一个数据库。你一旦选择好,便可以点击Test Connection(测试连接)测试连接是否可用。测试好后,点击Next(下一步)。

        弹出的对话框中显示了数据库所有的表、视图以及存储过程。选择你希望包含在模型中的项。我们选择所有的表(Meter,Poem,Poet),视图(vwLibrary),然后勾选上确定所生成对象名称的单复数形式、在模型中包含外键列复选框。我们将会进一步对此时行讨论。图2-8展示了我们所做的选择。

《Entity Framework 6 Recipes》翻译系列

  图2-8 选择表、视图包含进模型,勾选上确定所生成对象名称的单复数形式、在模型中包含外键列复选框

  当点击Finish(完成),向导会生成一个包含三张表和一个视图的模型。向导从数据库读取外键约束,并推导出Poet和Poem(s)之间的一对多关系,还有Meter和Poem(s)之间的一对多关系。

《Entity Framework 6 Recipes》翻译系列

图2-9 概念模型

  图2-9展示了一个包含表Poet,Poem以及Meter、视图vwLibrary的模型。

  现在,你拥有了一个可以在代码中使用的模型。请注意, vwLibrary实体是基于数据中的视图vwLibrary的。在绝大多数据库中,视图是只读的,插入、删除、更新不被支持。在实体框架中也同样如此,实体框架把视图视为只读。你可以通过映射存储过程来解决基于视图的实体的创建、更新和删除动作。我们将在第六章对此进行演示。

  原理

  让我们一起来看导入向导为我们创建的模型。请注意,实体中已经包含了标量属性和导航属性。标量属性被映射到数据库表中列,导航属性却来至数据库中的表间关系。

  在数据库关系图中,一个poem拥有一个meter和一个poet(作者)。这符合Meter和Poet中的导航属性。如果我有一个Poem实体的实例,导航属性Poet将引用一个Poet实体的实例,导航属性Meter将引用一个Meter实体的实例。

  一个Poet可能是多首诗的作者,它其中的导航属性Poems包含一个Poem实体的实例集合。这个集合可能是空的,这代表该诗人还未创建任何一首诗。对于Meter实体,其中的导航属性Poems同样也是一个集合。该导航属性包含属于指定Meter的Poem实体实例的集合。SQL Server不支持在视图上创建关系,这在模型中反映为一个没有导向属性的vwLibrary实体。

  导入向导在包含集合的导航属性的名称单复数形式上表示得相当的聪明。当你右键实体去查看他的Properties(属性),你会看到每个实体的实体集的名称同样为复数形式。例如Poem实体的实体集名称为Poems. 这种自动添加复数利益于,勾选上确定所生成对象名称的单复数形式复选框。

  勾选在模型中包含外键列复选框选项,使外键也包含在了模型中。虽然看上去,在拥有导航属性的同时好像没有必要再拥有外键属性。对引,我们会在接下来的技巧中演示拥有一个可直接访问外键属性的好处。

  代码清单2-2,演示了如何在模型中创建Poet,Poem以及Meter实体的实例并将他们保存到数据为。同时也演示了,如何通过查询模型从数据库中获取到poets和poems。

代码清单2-2.在模型中插入和查询

 

 1 using (var context = new EF6RecipesContext()) { 2         var poet = new Poet { FirstName = "John", LastName = "Milton" }; 3         var poem = new Poem { Title = "Paradise Lost" }; 4         var meter = new Meter { MeterName = "Iambic Pentameter" }; 5         poem.Meter = meter; 6         poem.Poet = poet; 7         context.Poems.Add(poem); 8         poem = new Poem { Title = "Paradise Regained" }; 9         poem.Meter = meter;10         poem.Poet = poet;11         context.Poems.Add(poem);12         poet = new Poet { FirstName = "Lewis", LastName = "Carroll" };13         poem = new Poem { Title = "The Hunting of the Shark" };14         meter = new Meter { MeterName = "Anapestic Tetrameter" };15         poem.Meter = meter;16         poem.Poet = poet;17         context.Poems.Add(poem);18         poet = new Poet { FirstName = "Lord", LastName = "Byron" };19         poem = new Poem { Title = "Don Juan" };20         poem.Meter = meter;21         poem.Poet = poet;22         context.Poems.Add(poem);23         context.SaveChanges();24       }25       using (var context = new EF6RecipesContext()) {26         var poets = context.Poets;27         foreach (var poet in poets) {28           Console.WriteLine("{0} {1}", poet.FirstName, poet.LastName);29           foreach (var poem in poet.Poems) {30             Console.WriteLine("\t{0} ({1})", poem.Title, poem.Meter.MeterName);31           }32         }33       }34 35       // 使用视图 vwLibrary36       using (var context = new EF6RecipesContext()) {37         var items = context.vwLibraries;38         foreach (var item in items) {39           Console.WriteLine("{0} {1}", item.FirstName, item.LastName);40           Console.WriteLine("\t{0} ({1})", item.Title, item.MeterName);41         }42       }

 

海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com

原标题:《Entity Framework 6 Recipes》翻译系列

关键词:ip

ip
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。