日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

ASP.NET MVC经典项目ProDinner项目解析(3)

發(fā)布時間:2024/8/23 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ASP.NET MVC经典项目ProDinner项目解析(3) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

三、Data層解析

?

?

這一層主要是和數(shù)據(jù)庫相關(guān)聯(lián)的, 所以這一層直接關(guān)系到應(yīng)用程序的健壯性。最近在各個渠道都在提大數(shù)據(jù)這個概念,大數(shù)據(jù)高并發(fā),尤其是facebook倡導(dǎo)的基于java應(yīng)用的Hadoop框架, 如火如荼, 也從各個層面得到這樣的消息或者說法, net在大數(shù)據(jù)高并發(fā)處理上比不上java, 這點(diǎn)我暫時不去評論他, 但是EF框架無法處理大數(shù)據(jù), 我還是需要保留個人觀點(diǎn)的。因?yàn)槟承┘軜?gòu)師自身對EF框架的不熟悉而對次妄加評論。我相信Code First模式是處理大數(shù)據(jù)的一個很好的方式。當(dāng)然,基于EF框架的大數(shù)據(jù)或者說基于NET框架這樣的經(jīng)典案例確實(shí)太少的。插點(diǎn)題外話,我們進(jìn)入MVC。

ProDinner使用的是Code First方式的EF框架,App.config就不去多說了, 無論采取那種方式, 連接數(shù)據(jù)庫的配置還是需要的, 這里要說下, 在我VS中打開基于類庫方式的EF, 連接數(shù)據(jù)庫的配置文件肯定在這個類庫的App.config中,但是如果是WEB項(xiàng)目運(yùn)行的話, WEB項(xiàng)目看見的只是這個類庫的DLL, 配置文件還是需要去web.cnofig中尋找, 所以, 我們在生成好類庫后, 記得將連接字符串也copy到web.config中,否則會報錯哦.

--- Db.cs

CodeFirst模式的本地數(shù)據(jù)庫類,繼承了DbContext.

protected override void OnModelCreating(DbModelBuilder modelBuilder){modelBuilder.Entity<Dinner>().HasMany(r => r.Meals).WithMany(o => o.Dinners).Map(f =>{f.MapLeftKey("DinnerId");f.MapRightKey("MealId");});modelBuilder.Entity<User>().HasMany(r => r.Roles).WithMany(o => o.Users).Map(f =>{f.MapLeftKey("UserId");f.MapRightKey("RoleId");});base.OnModelCreating(modelBuilder);}

這個重寫方法的用處就是,建立表的映射關(guān)系和外鍵引用關(guān)系, 如果你的引用關(guān)系比較復(fù)雜的話, 估計這里需要的代碼量不會少.

---DbContextFactory.cs

public interface IDbContextFactory{DbContext GetContext();}public class DbContextFactory : IDbContextFactory{private readonly DbContext dbContext;public DbContextFactory(){dbContext = new Db();}public DbContext GetContext(){return dbContext;}}

在使用EF框架的時候,DbContext實(shí)例化必須要保持唯一性,針對于應(yīng)用程序多層設(shè)計,在技術(shù)每一層或多個方法調(diào)用的時候, 我們使用的這個數(shù)據(jù)實(shí)體上下文必須要唯一。所以這里使用的是靜態(tài)的變量和靜態(tài)只讀的構(gòu)造函數(shù)保持唯一,在我的個人項(xiàng)目中我同樣用到了其他方式保證這個上下文唯一性

public class Db {Protected DbContext dbcontext;public Db(){dbcontext=new Db();} }.......public class Aservice:Db {public void Hell(){dbcontext.A.................} }...........................

當(dāng)然還有一種方式

public class DbContextFactory{public static LikaContext GetDbContext(){//當(dāng)?shù)诙螆?zhí)行的時候直接取出線程嘈里面的對象//CallContext:是線程內(nèi)部唯一的獨(dú)用的數(shù)據(jù)槽(一塊內(nèi)存空間)//數(shù)據(jù)存儲在線程棧中//線程內(nèi)共享一個單例LikaContext dbcontext = CallContext.GetData("DbContext") as LikaContext;//判斷線程里面是否有數(shù)據(jù)if (dbcontext == null) //線程的數(shù)據(jù)槽里面沒有次上下文 {//創(chuàng)建了一個EF上下文dbcontext = new LikaContext();//存儲指定對象CallContext.SetData("DbContext", dbcontext);}return dbcontext;}}

?

其實(shí)三種方式, 就是三種設(shè)計模式.

?

----DelRepo.cs

----Repo.cs

----UniRepo.cs

三個類通過List<T>具體實(shí)現(xiàn)了Core層的三個抽象接口類,T就是在具體使用的時候運(yùn)用的類型了.

?

這一層相對來說是對Core層的具體實(shí)現(xiàn)了.

轉(zhuǎn)載于:https://www.cnblogs.com/aspnetdream/archive/2013/04/25/3043813.html

總結(jié)

以上是生活随笔為你收集整理的ASP.NET MVC经典项目ProDinner项目解析(3)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。