博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《Entity Framework 6 Recipes》中文翻译——第十章EntityFramework存储过程处理(六)...
阅读量:4598 次
发布时间:2019-06-09

本文共 2462 字,大约阅读时间需要 8 分钟。

在TPT继承模式中填充实体

问题

  您希望使用存储过程来填充表中的实现TPT继承模式的实体。

解决方案

  比方说,在这个模型中,实体杂志Magazine和光盘DVD扩展了基本实体媒体Media。在下面的数据库中,我们分别有一个表对应每个实体。我们已经已经使用了TPT继承模式实现了这些实体。我们希望使用存储过程从数据库中获取该模型的数据。

要创建和使用返回这些实体的存储过程,要做以下操作。

  1、在您的数据库中,创建列表中存储的过程

create procedure [dbo].[GetAllMedia]asbeginselect m.MediaId,c.Title,m.PublicationDate, null PlayTime,'Magazine' MediaTypefrom Media c join Magazine m on c.MediaId = m.MediaIdunionselect d.MediaId,c.Title,null,d.PlayTime,'DVD'from Media c join DVD d on c.MediaId = d.MediaIdend

  2、右键单击设计面,并从数据库中选择更新模型。选择GetAllMedia存储过程。单击“完成”将存储过程添加到模型中。

  3、右键单击设计图面上,并选择“添加➤函数导入。在“对话框”中,选择“GetAllMedia”存储过程。在函数导入名称文本框中“GetAllMedia”。选择实体作为集合的类型,并作为返回的实体类型的Media。单击“确定”。这将创建骨架<FunctionImportMapping>。

  4、右键单击.edmx文件,并选择与➤XML编辑器打开。编辑函数导入映射框架中的映射部分<FunctionImportMapping >标签,将存储过程返回的行映射到该杂志Magazine 或基于媒体类型列的光盘DVD 实体上。

  5、下面开始调用存储过程

using (var context = new School5Entities())            {                context.Medias.Add(new Magazine                {                    Title = "Field and Stream",                    PublicationDate = DateTime.Parse("6/12/1945")                });                context.Medias.Add(new Magazine                {                    Title = "National Geographic",                    PublicationDate = DateTime.Parse("7/15/1976")                });                context.Medias.Add(new DVD                {                    Title = "Harmony Road",                    PlayTime = "2 hours, 30 minutes"                });                context.SaveChanges();            }            using (var context = new School5Entities())            {                var allMedia = context.GetAllMedia();                Console.WriteLine("All Media");                Console.WriteLine("=========");                foreach (var m in allMedia)                {                    if (m is Magazine)                        Console.WriteLine("{0} Published: {1}", m.Title,                                        ((Magazine)m).PublicationDate.ToShortDateString());                    else if (m is DVD)                        Console.WriteLine("{0} Play Time: {1}", m.Title, ((DVD)m).PlayTime);                }            }

运行结果

  解决该问题的两个关键部件为设置的存储过程的结果给鉴别器列和有条件的结果映射Magazine和DVD的实体。

  鉴别器列元数据列指定的数据库记录表示的对象的类型。

 

 

  

转载于:https://www.cnblogs.com/yunxiaguo/p/5707563.html

你可能感兴趣的文章
JAVA array,map 转 json 字符串
查看>>
2017-12-27练习
查看>>
NET设计规范(二) 命名规范
查看>>
VMware 9.0.1安装Mac OS X Mountain Lion 10.8.2
查看>>
SSL延迟
查看>>
android新手关于左右滑动的问题,布局把<android.support.v4.view.ViewPager/><ImageView/> 放在上面就不行了。...
查看>>
深入理解DIP、IoC、DI以及IoC容器
查看>>
赋值文件
查看>>
Vue 数组 字典 template v-for 的使用
查看>>
蓝牙模块选择经验谈
查看>>
java中==和equals
查看>>
CCActionPageTurn3D
查看>>
python random
查看>>
esp32-智能语音-cli(调试交互命令)
查看>>
netty与MQ使用心得
查看>>
关于dl dt dd 文字过长换行在移动端显示对齐的探讨总结
查看>>
swoolefy PHP的异步、并行、高性能网络通信引擎内置了Http/WebSocket服务器端/客户端...
查看>>
Python学习笔记
查看>>
unshift()与shift()
查看>>
使用 NPOI 、aspose实现execl模板公式计算
查看>>