国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

EF多數(shù)據(jù)庫(kù)預(yù)熱

2019-11-17 02:03:40
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

EF多數(shù)據(jù)庫(kù)預(yù)熱

使用EF第一次加載程序會(huì)很慢,因?yàn)镋F第一次會(huì)生成實(shí)體類和數(shù)據(jù)庫(kù)的對(duì)應(yīng)關(guān)系并做緩存,怎么解決這個(gè)問(wèn)題呢?站在巨人的肩膀上將會(huì)省力很多,博客園的dudu已經(jīng)給出了個(gè)解決方案(EF版本6.0以上)

http://m.survivalescaperooms.com/dudu/p/entity-framework-warm-up.html

主要代碼如下:

using (var dbcontext = new CnblogsDbContext()){    var objectContext = ((IObjectContextAdapter)dbcontext).ObjectContext;    var mappingCollection = (StorageMappingItemCollection)objectContext.MetadataWorkspace.GetItemCollection(Dataspace.CSSpace);    mappingCollection.GenerateViews(new List<EdmSchemaError>());}

根據(jù)代碼來(lái)看一個(gè)表對(duì)應(yīng)一個(gè)操作類,而我的項(xiàng)目使用的是Code First并使用了倉(cāng)儲(chǔ)模式(EF的三種模式區(qū)別自行查找資料),所以要做修改。

我的項(xiàng)目結(jié)構(gòu)如下:

public class Repository<T> : DbContext, IRepository<T>        where T : class,new()    {        PRivate static readonly string connection = ConfigurationManager.ConnectionStrings["connection"].ConnectionString;        private DbSet<T> _dbSet;        public Repository()            : base(connection)        { }        public DbSet<T> Query        {            get            {                if (_dbSet == null)                    _dbSet = Set<T>();                return _dbSet;            }        }}

使用的是泛型,所以我的解決方法是使用反射

解決方法:

private static void LoadEFViewMapping()        {            string[] items = { "Fish.Model" };            foreach (var item in items)            {                var data = Assembly.Load(item.Trim());                data.GetBaseClass()                    .Where(g => g.BaseType == typeof(MySQLBase))                    .ToList()                    .ForEach(entity =>                    {                        Type type = typeof(MySqlRepository<>);                        type = type.MakeGenericType(entity);                        var objectContext = ((IObjectContextAdapter)Activator.CreateInstance(type)).ObjectContext;                        var mappingCollection = (StorageMappingItemCollection)objectContext.MetadataWorkspace.GetItemCollection(DataSpace.CSSpace);                        mappingCollection.GenerateViews(new List<EdmSchemaError>());                    });                data.GetBaseClass()                    .Where(g => g.BaseType == typeof(SqlServerBase))                    .ToList()                    .ForEach(entity =>                    {                        Type type = typeof(SqlServerRepository<>);                        type = type.MakeGenericType(entity);                        var objectContext = ((IObjectContextAdapter)Activator.CreateInstance(type)).ObjectContext;                        var mappingCollection = (StorageMappingItemCollection)objectContext.MetadataWorkspace.GetItemCollection(DataSpace.CSSpace);                        mappingCollection.GenerateViews(new List<EdmSchemaError>());                    });            }        }

解釋一下:因我所有的實(shí)體類需執(zhí)行一個(gè)去除EF訪問(wèn)多余數(shù)據(jù)方法(具體參考:http://m.survivalescaperooms.com/dudu/archive/2011/12/27/entity_framework_sys_databases.html),所以所有實(shí)體都繼承一個(gè)基類,而本項(xiàng)目同時(shí)使用MySql和SqlServer數(shù)據(jù)庫(kù)所以有了MySqlBase和SqlServerBase類,這兩個(gè)類都繼承自基類BaseEntity,實(shí)體類根據(jù)訪問(wèn)數(shù)據(jù)庫(kù)分別繼承MySqlBase和SqlServerBase類


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 宁乡县| 区。| 大丰市| 资兴市| 太原市| 射阳县| 镇康县| 南乐县| 阿克陶县| 景宁| 德安县| 和平区| 金川县| 锦州市| 郁南县| 曲松县| 尖扎县| 宁夏| 澎湖县| 仪陇县| 泸州市| 全椒县| 永清县| 兴安县| 民权县| 布尔津县| 普格县| 瑞安市| 永善县| 永年县| 雷州市| 巧家县| 瑞丽市| 樟树市| 土默特右旗| 西吉县| 霸州市| 星子县| 扎鲁特旗| 静宁县| 滨州市|