ASP.NET MVC学习笔记3

一直使用WebForm进行开发,最近无事,决定研究一下ASP.NET MVC,现在ASP.NET MVC已经到版本2了,
ASP.NET  MVC是微软阵营中的一个新秀,我个人感觉这是微软向Java阵营伸出的橄榄枝,在这里其实完全可以
使用LinQ+ASP.NET MVC2进行开发,但出于对于SSH框架的流行,因此可以使用类似的思想ORM+Ioc:
MVC使用ASP.NET MVC 2
ORM使用的是NHibernate
NHibernate标注配置使用FluentNHibernate框架
Ioc使用微软的Unity框架,现面分别进行一些要点的讲解:
首先:NHibernate标注配置FluentNHibernate说明
普通类:
 

    Code:
    1. public class UserRolesMap:ClassMap<UserRoles>   
    2. {   
    3.     public UserRolesMap()   
    4.     {   
    5.         Id(r => r.Id);   
    6.         Map(r => r.Name);   
    7.     }   
    8. }  

 外键类:

Code:
  1. public class Users:ModelBase   
  2. {   
  3.     public virtual int Id { getset; }   
  4.     public virtual string Name { getset; }   
  5.     public virtual string Address { getset; }   
  6.     public virtual string Phone { getset; }   
  7.     public virtual string Mail { getset; }   
  8.     public virtual int UserStateId { getset; }   
  9.     public virtual int IsOnLine { getset; }   
  10.     public virtual string LoginId { getset; }   
  11.     public virtual string LoginPwd { getset; }   
  12.     public virtual int UserRoleId { getset; }   
  13.     public virtual int Gender { getset; }   
  14.     public virtual UserRoles UserRole { getset; }   
  15.     public virtual UserStates UserState { getset; }   
  16.   
  17.     public override IEnumerable<RuleInfo> GetRules()   
  18.     {   
  19.         if (string.IsNullOrEmpty(Name))   
  20.             yield return new RuleInfo("Name""名称不为空!");   
  21.         yield break;   
  22.     }           
  23. }  

Hibernate使用说明:
SessionFactory(会话工厂):

Code:
  1. public class SessionFactory   
  2. {   
  3.     private static ISessionFactory CurrentSessionFactory()   
  4.     {   
  5.         string connstring=System.Configuration.ConfigurationManager.ConnectionStrings["mybookshop"].ConnectionString;   
  6.         string path=HttpContext.Current.Server.MapPath("~/bin");   
  7.         return Fluently.Configure().Database(MsSqlConfiguration.MsSql2005.ConnectionString(connstring))   
  8.             .Mappings(m=>m.FluentMappings.AddFromAssembly(typeof(SessionFactory).Assembly).ExportTo(path)).BuildSessionFactory();   
  9.     }   
  10.   
  11.     private static ISession session;   
  12.     public ISession Session   
  13.     {   
  14.         get  
  15.         {   
  16.             if (session == null)   
  17.                 session = CurrentSessionFactory().OpenSession();   
  18.             return session;   
  19.         }   
  20.     }   
  21. }  

 Web.Config中配置连接字符串

DAL类使用Ioc注入SessionFactory:

Ioc说明:
控制器中需要注入DAL:


Code:
  1. public class UserRolesDAO   
  2.   {   
  3.       [Dependency]   
  4.       public SessionFactory Sf{get;set;}   
  5.       public IList<UserRoles> FindAll()   
  6.       {   
  7.           return Sf.Session.CreateQuery("from UserRoles r order by r.Id").List<UserRoles>();   
  8.       }   

 


需要在Global.asax添加Ioc初始化处理

Code:
  1. public class MvcApplication : System.Web.HttpApplication   
  2. {   
  3.     public static void RegisterRoutes(RouteCollection routes)   
  4.     {   
  5.         routes.IgnoreRoute("{resource}.axd/{*pathInfo}");   
  6.   
  7.         routes.MapRoute(   
  8.             "Default"// Route name   
  9.             "{controller}/{action}/{id}"// URL with parameters   
  10.             new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults   
  11.         );   
  12.   
  13.     }   
  14.   
  15.     protected void Application_Start()   
  16.     {   
  17.         AreaRegistration.RegisterAllAreas();   
  18.   
  19.         RegisterRoutes(RouteTable.Routes);   
  20.         InitializeContainer();   
  21.     }   
  22.   
  23.     protected virtual void InitializeContainer()   
  24.     {   
  25.         IUnityContainer container = MyTools.UnityContainer;   
  26.   
  27.         Type controllerType = typeof(IController);   
  28.         foreach (Type type in Assembly.GetExecutingAssembly().GetTypes())   
  29.         {   
  30.             if (controllerType.IsAssignableFrom(type))   
  31.             {   
  32.                 container.RegisterType(type, type);   
  33.             }   
  34.         }   
  35.         UnityControllerFactory factory = new UnityControllerFactory(container);   
  36.         ControllerBuilder.Current.SetControllerFactory(factory);   
  37.     }   
  38.   
  39. }  

 

MyTools代码:

Code:
  1. public class MyTools   
  2. {   
  3.     public static IUnityContainer UnityContainer   
  4.     {   
  5.         get  
  6.         {   
  7.             IUnityContainer unity = new UnityContainer();   
  8.             //手动Ioc注入   
  9.             return unity;   
  10.         }   
  11.     }   
  12. }  


最后再说一下MVC中的验证:
创建ModelBase类(Model基类):

Code:
  1. public class ModelBase   
  2. {   
  3.        
  4.     public virtual IEnumerable<RuleInfo> GetRules()   
  5.     {   
  6.         yield break;   
  7.     }   
  8.   
  9.     /// <summary>   
  10.     /// 验证   
  11.     /// </summary>   
  12.     public virtual void Validate()   
  13.     {   
  14.         if (this.GetRules().Count()>0)   
  15.             throw new ApplicationException();   
  16.     }   
  17. }   
  18.   
  19. public class RuleInfo   
  20. {   
  21.     public string Name { getset; }   
  22.     public string Msg { getset; }   
  23.     public RuleInfo(string name, string msg)   
  24.     {   
  25.         this.Name = name;   
  26.         this.Msg = msg;   
  27.     }   
  28. }  


Model类继承此类,并重写GetRules方法

Code:
  1. public class UserRoles:ModelBase   
  2. {   
  3.     public virtual int Id { getset; }   
  4.     public virtual string Name { getset; }   
  5.     public override IEnumerable<RuleInfo> GetRules()   
  6.     {   
  7.         //进行验证   
  8.         if (string.IsNullOrEmpty(Name))   
  9.             yield return new RuleInfo("Name""名称不为空!");   
  10.         yield break;   
  11.     }   
  12. }  


在DAL中使用验证:

Code:
  1. public int Add(UserRoles r)   
  2. {   
  3.     try  
  4.     {   
  5.         r.Id = 0;   
  6.         r.Validate();//验证   
  7.         Sf.Session.Save(r);   
  8.         Sf.Session.Flush();   
  9.         return 1;   
  10.     }   
  11.     catch    
  12.     {   
  13.         return 0;   
  14.     }   
  15. }  

哈哈!OK了!

www.hahaman.cn/ASP_NET/thread-362-1-1.aspx

你可能感兴趣的:(mvc,Hibernate,session,IOC,webform,asp.net)