亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

愛與恨的抉擇:ASP.NET 5+EntityFramework 7

2019-11-17 01:54:57
字體:
來源:轉載
供稿:網友

愛與恨的抉擇:asp.net 5+EntityFramework 7

  • EF7 的糾纏
  • ASP.NET 5 的無助
  • 忘不了你的好

一開始列出的這個博文大綱,讓我想到了很久之前的一篇博文:戀愛雖易,相處不易:當EntityFramework愛上AutoMapper,只不過這次的劇情換主角了,而且與 EF 和 AutoMapper 愛情故事不同的是,這次是個悲劇。

對 ASP.NET 5 和 EF7 的感情,從她倆一出生,我就不可自拔的愛上她們了,不要嫌哥多情,有“情”,就是任性。

從一開始的一見鐘情,到慢慢的深入了解,再到最后的抉擇與無奈,不管結局如何如何,其實這個過程,已經讓我們彼此學到了很多,也成長了很多。

EF7 的糾纏

前段時間,重寫之前的一個項目,選擇的是用 ASP.NET 5+EF7 進行開發,因為我自己很喜歡 EF,所以一開始就先研究的 EF7,當看到 Code First Only,以及跨平臺的支持(和我關系不大)等等,非常的激動,記得當時還紀錄了一篇博文:EF7 Code First Only-所引發的一些“臆想”,有人會說,對于 EF 的開發模式,EF7 的功能又不是增加,而是減少了(Only),有必要這么大驚小怪嗎?當然表面上來說,確實沒有什么驚奇的地方,但自己深入一想,Only 關鍵字,所傳遞的一些信息卻是另一層面的東西,那篇博文中已經寫的很詳細了,這邊就不啰嗦了。

對于 EF7 的項目應用,我自己是充滿信心的,不管遇到什么問題,我也都想盡辦法去解決,無奈的是網上資料太少,谷歌搜索一些 EF7 問題關鍵詞,基本上找不到對應的解決方案,所以有些東西只能自己去摸索,去實踐,但這樣也會造成,往往一個很簡單的問題,自己卻想的很復雜,最后就不知不覺的陷在里面,而且越是解決不了,自己就越想解決,然后就陷入一個惡性循環,最后呢?這個問題還是沒有解決,這樣所造成的結果是什么呢?很簡單,寶貴的時間被浪費了,沒辦法,這也是新技術所應用的成本。

我記得有一個 EF7 Migration 的問題,這個問題大概花了我兩三天的時間,是的,兩三天的時間啊,一直在解決這個問題,最后呢?很顯然,沒有解決,而且之后的幾天一直在郁悶,壓抑的感覺越來越強烈,當一個問題存在你心中很久很久,你就越想解決它,這個想法也就會變的越來越強烈,所以你需要你個發泄點,什么呢?就是寫博文。轉移注意力,也算是一種吐槽,就紀錄了一篇博文:

  • EntityFramework 7 開發紀錄

這篇博文前面部分是一些 EF7 的簡單使用,比如鏈接與實體映射配置等,當然用過之后,你會發現和 EF 的其他版本差別很大,不可否認,非常強大,也更加“人性化”,比如最愛的:OneToOne、OneToMany 和 ManyToOne,簡單、直接、明了。博文的后半部分主要紀錄我遇到的 EF7 Migration 問題,當然只是一個紀錄,沒有說明其解決方式,當時紀錄的目的也更多的是一種吐槽,或者自我發泄,但沒想到有一位園友 JeffreyWu,回復中貼出的一個參考鏈接,打開了自己的一扇窗,真心非常感謝他,而且當時的心情真是描述不出來,就像烏云之后的晴天,壓抑自己的一個問題,終于被解決了,那種感覺真是比中 500W 彩票的感覺還要好。

其實你發現,EF7 Migration 的問題解決很簡單,就是換一種方法:使用 KVM 進行命令操作,而我那幾天時間卻一直撲在:怎么使用 Package Manager Console 進行 EF7 Migration 操作?而且一直陷在里面,最后卻解決不了。所以通過這件事,我自己也收獲了一點,那就是如何解決問題?如果一個問題在一個場景中自己始終解決不了,不妨跳出這個場景,換一種思路去解決,不經意的一瞬間,也許這個問題就可以解決了。當然收獲的最重要一點是:有問題,寫博文,拋出問題,之后零零散散紀錄了一些:

  • EntityFramework 7 smallint short 奇怪問題(已解決)
  • EntityFramework 7 如何查看執行的 SQL 代碼?
  • EntityFramework 7 OrderBy Skip Take-計算排序分頁 SQL 翻譯
  • EntityFramework 7 Join Count LongCount 奇怪問題
  • EntityFramework 7 Left Join Where Select 奇怪問題
  • EntityFramework 7 Left Join Where is error(Test record)
  • EntityFramework 7 Linq Contains In 奇怪問題
  • ...

上面這些 EF7 問題,都是項目應用中所遇到的,而且是最最普通的問題。通過之前 EF7 Migration 的事件,我自己在解決上面問題中,對于每一個問題,給自己的解決時間為最多半天,如果自己在半天時間內解決不了,那就換一種思路,或者用另外一種方式去實現,達到同樣的效果即可,所以對于上面每一個問題,我都沒有像 EF7 Migration 一樣,陷在里面過,當然有的解決了,有的沒有解決,比較好的是,可以用另一種方式實現同樣的效果。

在博文中,有園友說可以把問題提交給:EntityFramework 7 Issues,然后我也順便提交了幾個,當時看到 issues 中那幾百個問題,而且大部分都是 Open 狀態,Closed 的很少,對于提交的問題,我的想法是希望自己的寫法有問題,而不是 EF7 本身的問題,因為我項目正在使用它,我自己的問題可以解決,如果是它的問題,要等它解決,這就需要時間,不知道何年何月,但事實卻是,提交的幾個問題都是 Bug:

這個很無奈,但通過這件事你會發現除這件事之外的很多東西,比如,因為開源,因為社區,你可以干很多事情,如果自己有能力,有時間,你完全可以去查看 EF7 的源代碼,去幫微軟解決問題,然后隨意的和大洋彼岸寫 C# 最好的程序員交流,當然能干這些的前提條件很多。

其實這些問題最后確診為“Bug”,就致使我對使用 EF7 產生了一些動搖,畢竟她現在還處在 Beta 階段,她還年輕,需要時間成長,而我卻沒有時間陪她、等她,這也許是我和她之間的一種無奈吧。

ASP.NET 5 的無助

ASP.NET 5 之前的名字叫 ASP.NET vNext,其實我對她就像是與鄰班的女同學,見過幾面,卻不怎么了解。對于 ASP.NET 5,說白了,我頂多是做了幾個 Demo,并沒有用于生產環境,從 ASP.NET 5 的目錄結構或者其他文章的運行機制介紹中,你就可以看出 ASP.NET 5 這次的改變是翻天覆地的,但簡單的 Demo 說明不了什么問題,其實在現有的 ASP.NET 5 項目中,我也寫了不少的代碼,但都局限于 Controller 和 View 的使用,對于這塊,你可以像使用之前 MVC 版本一樣,在這部分中,你能體會到它的改變很少,最多你會發現,在 Views 目錄下居然沒有了 Web.config,除了 Controller 和 View,在 ASP.NET 5 中,我寫代碼最多的地方就是 MaPRoute 路由配置了,這個不得不說非常強大,寫起來也非常的爽,詳細內容后面再說。

關于 ASP.NET 5,我只紀錄一點,昨天進行 ASP.NET 5 項目的身份驗證開發,也就是類似之前 MVC 的 FormsAuthentication.SetAuthCookie 操作,你會發現在 ASP.NET 5 中,沒有了這段代碼,身份驗證操作采用類似于 Owin 形式的,但這個我沒接觸過,所以不是很了解,關于這個問題,我給自己一天的時間去解決,或者做出一個可以運行的 IdentityDemo,結果呢?我想你已經猜到了,沒有完成。

關于 ASP.NET 5 的學習,微軟提供了一個 ASP.NET 5 版本的 MusicStore 項目,對于學習資料很少的 ASP.NET 5 來說,這是相當寶貴的,關于身份驗證的實現,我當時也希望可以從這個項目中得到一些啟發,但遺憾的是沒有找到我所需要的,我稍微貼一下這部分的實現代碼。

AccountController:

[Authorize]public class AccountController : Controller{    public AccountController(UserManager<applicationUser> userManager, SignInManager<ApplicationUser> signInManager)    {        UserManager = userManager;        SignInManager = signInManager;    }    public UserManager<ApplicationUser> UserManager { get; private set; }    public SignInManager<ApplicationUser> SignInManager { get; private set; }    // GET: /Account/Login    [HttpGet]    [AllowAnonymous]    public IActionResult Login(string returnUrl = null)    {        ViewBag.ReturnUrl = returnUrl;        return View();    }    //    // POST: /Account/Login    [HttpPost]    [AllowAnonymous]    [ValidateAntiForgeryToken]    public async Task<IActionResult> Login(LoginViewModel model, string returnUrl = null)    {        if (ModelState.IsValid)        {            var signInStatus = await SignInManager.PassWordSignInAsync(model.UserName, model.Password, model.RememberMe, shouldLockout: false);            switch (signInStatus)            {                case SignInStatus.Success:                    return RedirectToLocal(returnUrl);                case SignInStatus.Failure:                default:                    ModelState.AddModelError("", "Invalid username or password.");                    return View(model);            }        }        // If we got this far, something failed, redisplay form        return View(model);    }}

ConfigureServices:

// Add Identity services to the services container.services.AddDefaultIdentity<ApplicationDbContext, ApplicationUser, IdentityRole>(Configuration);

這只是示例項目中的部分代碼,除了 ConfigureServices 中的這部分的配置,其實還有 services.AddIdentity<IdentityUser>();app.UseIdentity(); 等等,到現在我都不明白這其中的區別,或者所不同的作用,在之前的 MVC 版本中,我們一般在 Web.config 中進行下面配置:

<system.web>  <authentication mode="Forms">    <forms name=".DottextCookie" loginUrl="~/Account/Login" protection="All" domain=".demo.com" protection="All" timeout="43200" path="/" />  </authentication>  <compilation debug="true" targetFramework="4.5.3" />  <httpRuntime /></system.web>

而在 ASP.NET 5 中沒有了 Web.config,哪該怎么進行配置?MusicStore 中并沒有這部分的實現,找資料后發現,要這樣進行配置:

app.UseCookieAuthentication((cookieOptions) =>{    cookieOptions.AuthenticationType = ClaimsIdentityOptions.DefaultSecurityStampClaimType;    cookieOptions.AuthenticationMode = AuthenticationMode.Active;    cookieOptions.CookieHttpOnly = true;    cookieOptions.CookieName = ".DottextCookie";    cookieOptions.LoginPath = new PathString("/Account/Login");    cookieOptions.CookieDomain = ".demo.com";}, "AccountAuthorize");

project.json 配置:

"dependencies": {    "Microsoft.AspNet.Identity.EntityFramework": "3.0.0-beta1",    "Microsoft.AspNet.Identity": "3.0.0-beta1",    "Microsoft.AspNet.Security": "1.0.0-beta1",    "Microsoft.AspNet.Security.Cookies": "1.0.0-beta1"}

Security 類似于關聯賬戶登錄,比如你可以在 ASP.NET 5 中,增加外部賬戶驗證(Google、Facebook 賬戶等等),那 Microsoft.AspNet.Identity.EntityFramework 是什么?身份驗證怎么和 EF 扯到一起了,這個是 ASP.NET 5 中新增的一個功能,你可以進行配置身份驗證的 DbContext,就比如上面 ConfigureServices 中的配置代碼,然后綁定之后,你可以很方便的進行身份驗證操作,比如 Login、Register、Manage 和 LogOff 等等,找到一篇示例說明:

  • Using Identity in ASP.NET applications

越扯越多了,這部分內容,可以另外寫篇博文說明,其實最后我想要的功能是不綁定 DbContext,在 ASP.NET 5 項目中,只進行判斷操作,身份驗證在另外服務中進行,然后在本項目中可以實現類似 FormsAuthentication.SetAuthCookie 操作就可以了,但最后做了幾個 Demo 都不能實現,規定的一天時間,已經用完了,所以。。。

還有一個問題是如何在 ASP.NET 5 項目中添加 Web 引用,比如 WCF,但你發現在 Web 項目或是類庫項目,并沒有“Add Web Reference”這個選項,比如這個帖子:Add Web Service Reference in VS 2015,沒人回答,搜索之類的關鍵詞,如果有回答,大部分是:no,那如果不支持的話,可以換一種思路去解決,比如使用 WebAPI,當然現在也比較流行這個,但這就會造成一個重寫成本,你需要額外進行考慮。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91网站免费看| 欧美久久精品午夜青青大伊人| 久久久久国产精品免费| 中文字幕国产亚洲| 日韩免费观看高清| 精品久久久久人成| 色综合久久88色综合天天看泰| 国产亚洲精品va在线观看| 欧美精品中文字幕一区| 日韩精品久久久久| 国产精品999999| 日韩欧美国产网站| 欧美华人在线视频| 色偷偷亚洲男人天堂| 精品国产老师黑色丝袜高跟鞋| 青青在线视频一区二区三区| 久久国产精品久久久久久久久久| 久久91亚洲精品中文字幕| 亚洲电影成人av99爱色| 亚洲综合日韩在线| 亚洲精品理论电影| 欧美高清视频在线| 88国产精品欧美一区二区三区| 亚洲最大在线视频| 国产日本欧美在线观看| 欧美日韩电影在线观看| 久久久久久久一| 久久久精品久久久久| 欧美激情视频三区| 亚洲天堂免费观看| 精品视频在线导航| 国产99久久精品一区二区| 97精品国产97久久久久久| 色偷偷888欧美精品久久久| 国产成人亚洲综合91| 国产ts一区二区| 欧美电影在线观看完整版| 日韩电影中文字幕一区| 欧美精品性视频| 国产91对白在线播放| 亚洲自拍偷拍视频| 久久精品视频亚洲| 亚洲自拍偷拍色图| 影音先锋欧美精品| 久久99精品视频一区97| 欧美激情视频三区| 欧美另类老女人| 高清日韩电视剧大全免费播放在线观看| 久久亚洲精品毛片| 国产区亚洲区欧美区| 欧美高清不卡在线| 国产精品爽爽ⅴa在线观看| 国产欧美精品久久久| 久久久精品久久久久| 欧美极品少妇xxxxⅹ喷水| 九九综合九九综合| 96pao国产成视频永久免费| 日本一区二区在线播放| 中文字幕日韩有码| 96pao国产成视频永久免费| 中文字幕在线日韩| 日本伊人精品一区二区三区介绍| 青青草原一区二区| 欧美影院久久久| 成人有码在线播放| 亚洲一级黄色av| 夜夜狂射影院欧美极品| 欧美黑人极品猛少妇色xxxxx| 欧美一区二区三区免费观看| 日韩av免费在线| 日韩精品高清在线观看| 日韩精品极品毛片系列视频| 菠萝蜜影院一区二区免费| 91在线观看免费高清完整版在线观看| 国产欧美日韩91| 九九热99久久久国产盗摄| 欧美黑人国产人伦爽爽爽| 国产999精品视频| 成人在线视频网站| 国产成人精品久久亚洲高清不卡| 亚洲石原莉奈一区二区在线观看| 久热精品在线视频| 日韩69视频在线观看| 欧美色图在线视频| 亚洲色图狂野欧美| 国产乱人伦真实精品视频| 日韩中文在线观看| 亚洲精品国产福利| 国产精品27p| 一级做a爰片久久毛片美女图片| 国产91精品视频在线观看| 在线播放日韩欧美| 亚洲一区二区三区xxx视频| 97精品国产97久久久久久| 97色在线观看免费视频| 亚洲国产成人在线视频| 欧美电影《睫毛膏》| 成人黄色短视频在线观看| 久久久久久久久久亚洲| 国产欧美一区二区三区久久人妖| 亚洲第一精品自拍| 日本一区二区在线播放| 久久精品99无色码中文字幕| 亚洲男人天堂九九视频| 久久久国产一区| 国内精品伊人久久| 欧美日韩精品中文字幕| 欧美成人剧情片在线观看| 国产精品久久久久久久久久久久久| 精品久久香蕉国产线看观看gif| 91高清视频免费观看| 欧美在线视频网| 久久久伊人欧美| 欧美精品久久久久久久| 国产亚洲欧美日韩美女| 日韩精品中文字幕有码专区| 欧美激情一二三| 91久久久久久久久久| 亚洲欧美成人网| 欧美大奶子在线| 992tv成人免费影院| 欧美午夜无遮挡| 国产精品三级网站| 欧美高清视频一区二区| 成人久久一区二区三区| 日韩中文在线中文网三级| 日韩电影大全免费观看2023年上| 91麻豆国产精品| 欧美插天视频在线播放| 亚洲性线免费观看视频成熟| 国产精品久久色| 97在线视频精品| 亚洲剧情一区二区| 国产欧美亚洲精品| 日韩精品视频在线观看网址| 亚洲福利视频免费观看| 91在线观看免费高清| 午夜精品久久久久久99热软件| 国产精品中文字幕在线| 人人做人人澡人人爽欧美| 国产免费一区二区三区在线能观看| 色视频www在线播放国产成人| 精品一区电影国产| 日韩激情av在线免费观看| 热久久这里只有精品| 久久久午夜视频| 国产aⅴ夜夜欢一区二区三区| 久久青草精品视频免费观看| 日韩一区av在线| 久久成人精品电影| 久久精品国产一区| 国产在线不卡精品| 日韩中文字幕在线观看| 欧美在线观看网址综合| 欧美另类老肥妇| 国产成人短视频| 国产成人极品视频| 国产噜噜噜噜噜久久久久久久久| 亚洲欧美激情在线视频| 久久久久久久久亚洲| 91免费福利视频| 久久亚洲精品视频| 91成人在线播放| 日本久久久久久久久久久|