成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

ADO.NET Entity Framework繼承的三種形式

開發(fā) 后端
本文將介紹ADO.NET Entity Framework繼承的三種形式:一體系一表方式、一類一表方式、一具體類一表方式,希望本文能對大家有所幫助。

繼承在各種編程中應(yīng)用很多,但是ADO.NET Entity Framework繼承還存在一定程度的不足,很可能出現(xiàn)映射錯(cuò)誤,必須手工來維護(hù)EDMX中的MSL部分。

ADO.NET Entity Framework繼承(以下簡稱ADO.NET EF)有一個(gè)非常可信的運(yùn)行時(shí)。之所以不敢在項(xiàng)目中廣泛使用是因?yàn)槠湓愀獾脑O(shè)計(jì)時(shí)。這個(gè)DSL設(shè)計(jì)時(shí)糟糕在哪里呢?其一,只能是先設(shè)計(jì)好數(shù)據(jù)庫后設(shè)計(jì)實(shí)體模型;其二,如果你修改了數(shù)據(jù)庫結(jié)構(gòu),再更新實(shí)體模型時(shí),你所做的修改全部作廢,最糟糕的是,很可能會(huì)出現(xiàn)映射錯(cuò)誤,你必須手工來維護(hù)EDMX中的MSL部分。通常數(shù)據(jù)庫結(jié)構(gòu)的修改會(huì)成為你的噩夢。

還必須指出一點(diǎn),ADO.NET Entity Framework繼承在MSDN中的文檔是有問題的。不信你看我的發(fā)現(xiàn):MSDN,微軟怎么會(huì)這樣啊?

不得不承認(rèn),ADO.NET Entity Framework繼承的運(yùn)行時(shí)對繼承關(guān)系的處理是非常讓人舒服的。本文帶你去體驗(yàn)一下ADO.NET EF的繼承。

與通常的繼承關(guān)系映射一樣,支持三種方式:

◆一體系一表方式

◆一類一表方式

◆一具體類一表方式

對于***種方式和第三種方式,我是非常不屑的。我有文章講過我的看法:細(xì)說繼承關(guān)系映射。

***種方式有一篇文章已經(jīng)講了具體的操作方式:Single Table Inheritance in Entity Framework。這種方式有什么問題呢?那個(gè)“Type”字段我們是可以接受的,因?yàn)樵谶\(yùn)行時(shí)這個(gè)字段完全是透明的;但是那個(gè)“Salary”、“Rate”和“Hours”可以為空,這個(gè)我們不能接受,因?yàn)檫@意味著例如我們存貯一個(gè)SalariedExployee實(shí)體,可以堂而皇之地不給Salary賦值,而導(dǎo)致業(yè)務(wù)錯(cuò)誤。這便是我所反感的“可空冗余”。不過凡事都有例外,如果派生類中的屬性剛好都是可空的,那這個(gè)可空就不冗余了,而單表繼承簡單高效的好處就可以坐收了。

第三種方式我是無法接受的,因?yàn)楦窘鉀Q不了我多次提到的“關(guān)系共享”的問題。

還好,ADO.NET EF提供了***的第二種方式支持。有文章講這個(gè)方式:

Entity Framework Modeling : Entity Splitting

Entity Framework Modeling: Entity Splitting Part II

不過,我沒有按這篇文章所提示的方式設(shè)置成功,也許我的環(huán)境不同。重要的是,我明白了設(shè)置繼承的幾個(gè)要點(diǎn):***,不要手工修改BaseType來設(shè)置繼承,而是要用上下文菜單中的“添加”→“繼承”的方式。我們于是相信,除了BaseType以外,ADO.NET EF的DSL為EDMX中的MSL部分加入了某些內(nèi)容。第二,手工刪除派生類中的關(guān)鍵字段屬性。第三,注意操作順序。

現(xiàn)在用一個(gè)實(shí)例來說明。這個(gè)例子用于解決關(guān)于權(quán)限的問題。業(yè)務(wù)系統(tǒng)對權(quán)限的判斷僅根據(jù)其是否擁有某個(gè)“權(quán)柄”。這個(gè)權(quán)柄用一個(gè)字符串表示在Privilege表中。這個(gè)權(quán)柄只可以授予給角色。用戶和用戶組都可以隸屬于某個(gè)角色,用戶組中的用戶可以從該用戶組繼承所有的角色。實(shí)際上的應(yīng)用可能會(huì)在權(quán)柄上再做一些文章,例如加上權(quán)柄作用域?qū)ο蟆_@與本主題沒有關(guān)系,就此省略。

下圖是數(shù)據(jù)庫的設(shè)計(jì):

數(shù)據(jù)庫的設(shè)計(jì)

在Visual Studio 2008中建立一個(gè)類庫項(xiàng)目。新增一個(gè)名叫“InheritanceDemoModel.edmx”的實(shí)體數(shù)據(jù)模型,并從建立好的數(shù)據(jù)庫生成,把實(shí)體連接設(shè)置命名為“DemoEntities”。于是,得到這個(gè)最初的成果:

DemoEntities

先刪除UserOrGroup和User之間的關(guān)系,再刪除UserOrGroup與Group之間的關(guān)系,然后把所有的實(shí)體集名稱改成復(fù)數(shù)。

現(xiàn)在加入兩個(gè)繼承關(guān)系:一個(gè)是UserOrGroup為基,Group為派生;另一個(gè)是UserOrGroup為基,User為派生。然后,變成這樣:

加入兩個(gè)繼承關(guān)系

下一步,先把UserOrGroup的“抽象”屬性改為“true”,再刪除User的UserId屬性和Group的GroupId屬性。刪除這兩個(gè)屬性以后,要分別把原來的兩個(gè)字段(Column)映射到UserOrGroup的Id字段:

UserOrGroup的Id字段

UserOrGroup的Id字段2

***一步,由于刪除了User的UserId屬性和Group的GroupId屬性,Group的Users屬性和User的Groups屬性映射被破壞了,需要重新映射:

重新映射

保存,完成映射。接下來可以做幾個(gè)測試,例如,測試分別創(chuàng)建幾個(gè)Privilege、Role、Group、User,然后用一個(gè)簡單的Linq表達(dá)式來獲取某個(gè)User所有的權(quán)柄。

代碼就不貼了,有興趣下載代碼吧。

ADO.NET Entity Framework繼承的三種形式就介紹到這里。

【編輯推薦】

  1. 什么是ADO.NET:數(shù)據(jù)源的連接樞紐
  2. 淺談如何更好的打開和關(guān)閉ADO.NET連接池
  3. ADO.NET中SQL Server數(shù)據(jù)庫連接池
  4. ADO.NET中的多數(shù)據(jù)表操作讀取
  5. 淺談ADO.NET中的五個(gè)主要對象
責(zé)任編輯:彭凡 來源: 博客園
相關(guān)推薦

2009-12-30 14:03:36

ADO.NET Ent

2009-11-03 16:27:43

ADO.NET Ent

2009-12-22 14:46:09

ADO.NET Ent

2009-12-22 17:14:37

ADO.NET Ent

2009-12-23 16:00:50

ADO.NET Ent

2009-12-30 09:10:04

ADO.NET Ent

2009-12-30 10:14:41

ADO.NET Ent

2009-12-23 16:15:24

ADO.NET Ent

2010-04-20 09:40:38

ADO.NET Ent

2009-12-31 14:56:36

ADO.NET Ent

2009-11-13 09:39:48

2009-12-22 16:03:34

ADO.NET Ent

2009-12-23 13:52:18

2009-11-11 15:59:17

ADO.NET Ent

2009-12-30 10:43:31

ADO.NET Ent

2009-11-13 16:29:11

ADO.NET連接字符

2009-12-21 14:55:49

ADO.NET屬性

2009-12-23 17:50:38

ADO.NET Fra

2009-12-30 14:12:53

ADO.NET Fra

2009-12-22 17:09:34

ADO.NET Ent
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 国产午夜高清 | 成人在线一区二区 | 国产精品国产三级国产aⅴ中文 | 国产精品女人久久久 | 91精品国产综合久久久动漫日韩 | 亚洲在线一区 | 国产成人aⅴ| 99re在线视频观看 | 成年人视频免费在线观看 | 伊人春色成人网 | 亚州一区二区三区 | 国产精品区一区二区三区 | 国产a视频 | 97av在线 | 亚洲 欧美 日韩在线 | 国产精品久久亚洲7777 | 免费黄色av| 日本激情一区二区 | 中文字幕免费在线 | 午夜久久久久久久久久一区二区 | 色中文在线 | 天天干夜夜操视频 | 国产精品久久久久影院色老大 | 欧美亚洲视频在线观看 | 在线免费黄色小视频 | 手机看片在线播放 | 亚洲国产成人精品女人久久久 | 91超碰在线 | 自拍中文字幕 | 91视频播放 | 99色在线视频 | 久久亚洲一区二区 | 久久精品免费观看 | 99久久婷婷国产综合精品首页 | 中文字幕精品一区二区三区在线 | 午夜影院网站 | 国产成人精品久久二区二区91 | 久久精品欧美一区二区三区不卡 | jlzzjlzz国产精品久久 | 最新黄色在线观看 | 91精品国产美女在线观看 |