zoukankan      html  css  js  c++  java
  • ASP.NET MVC经典项目ProDinner项目解析3

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

    三、Data层解析

    这一层主要是和数据库相关联的, 所以这一层直接关系到应用程序的健壮性。最近在各个渠道都在提大数据这个概念,大数据高并发,尤其是facebook倡导的基于java应用的Hadoop框架, 如火如荼, 也从各个层面得到这样的消息或者说法, net在大数据高并发处理上比不上java, 这点我暂时不去评论他, 但是EF框架无法处理大数据, 我还是需要保留个人观点的。因为某些架构师自身对EF框架的不熟悉而对次妄加评论。我相信Code First模式是处理大数据的一个很好的方式。当然,基于EF框架的大数据或者说基于NET框架这样的经典案例确实太少的。插点题外话,我们进入MVC。

    ProDinner使用的是Code First方式的EF框架,App.config就不去多说了, 无论采取那种方式, 连接数据库的配置还是需要的, 这里要说下, 在我VS中打开基于类库方式的EF, 连接数据库的配置文件肯定在这个类库的App.config中,但是如果是WEB项目运行的话, WEB项目看见的只是这个类库的DLL, 配置文件还是需要去web.cnofig中寻找, 所以, 我们在生成好类库后, 记得将连接字符串也copy到web.config中,否则会报错哦.

    --- Db.cs

    CodeFirst模式的本地数据库类,继承了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);
            }
    复制代码

    这个重写方法的用处就是,建立表的映射关系和外键引用关系, 如果你的引用关系比较复杂的话, 估计这里需要的代码量不会少.

    ---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实例化必须要保持唯一性,针对于应用程序多层设计,在技术每一层或多个方法调用的时候, 我们使用的这个数据实体上下文必须要唯一。所以这里使用的是静态的变量和静态只读的构造函数保持唯一,在我的个人项目中我同样用到了其他方式保证这个上下文唯一性

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

    当然还有一种方式

    复制代码
     public class DbContextFactory
        {
            public static LikaContext GetDbContext()
            {
                //当第二次执行的时候直接取出线程嘈里面的对象
                //CallContext:是线程内部唯一的独用的数据槽(一块内存空间)
                //数据存储在线程栈中
                //线程内共享一个单例
                LikaContext dbcontext = CallContext.GetData("DbContext") as LikaContext;
    
                //判断线程里面是否有数据
                if (dbcontext == null)  //线程的数据槽里面没有次上下文
                {
                    //创建了一个EF上下文
                    dbcontext = new LikaContext();
    
                    //存储指定对象
                    CallContext.SetData("DbContext", dbcontext);
                }
    
                return dbcontext;
            }
        }
    复制代码

    其实三种方式, 就是三种设计模式.

    ----DelRepo.cs

    ----Repo.cs

    ----UniRepo.cs

    三个类通过List<T>具体实现了Core层的三个抽象接口类,T就是在具体使用的时候运用的类型了.

    这一层相对来说是对Core层的具体实现了.

     

     

    当前标签: prodinner

     
    ASP.NET MVC经典项目ProDinner项目解析(3) aspnetdream 2013-04-25 23:33 阅读:796 评论:0  
     
    ASP.NET MVC经典项目ProDinner项目解析(2) aspnetdream 2013-04-14 21:47 阅读:1310 评论:2  
     
    ASP.NET MVC经典项目ProDinner项目解析(1) aspnetdream 2012-03-02 21:52 阅读:2514 评论:7

     

     

     

     

  • 相关阅读:
    Java实现 蓝桥杯VIP 算法提高 排队打水问题
    Java实现 蓝桥杯VIP 算法提高 排队打水问题
    Java实现 蓝桥杯VIP 算法提高 排队打水问题
    Java实现 蓝桥杯VIP 算法提高 特殊的质数肋骨
    Java实现 蓝桥杯VIP 算法提高 特殊的质数肋骨
    Java实现 蓝桥杯VIP 算法提高 特殊的质数肋骨
    Java实现 蓝桥杯VIP 算法提高 特殊的质数肋骨
    现在使用控件, 更喜欢继承(覆盖控件已有的函数,很奇怪的一种使用方式)
    Controls 属性与继承 TShape 类的小练习(使用TShape可以解决很多图形问题)
    QT创建窗口程序、消息循环和WinMain函数(为主线程建立了一个QEventLoop,并执行exec函数)
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3044620.html
Copyright © 2011-2022 走看看