MySQL、Fluently NHibernate、WebAPI、Autofac,对我来说每一个都是麻烦疙瘩,现在它们为了一个共同的项目而凑合到一起了。一路磕磕碰碰,现在貌似有了一点眉目。

作为一个步入老人痴呆帕金森阶段的老革命,我当然要马上将奋斗过程记录下来:

1、MySql + Fluently NHibernate

static ISessionFactory sessionFactory;public static ISession OpenSession(string connString, string[] assemblys)
{if (sessionFactory == null){sessionFactory = Fluently.Configure().Database(FluentNHibernate.Cfg.Db.MySQLConfiguration.Standard.ConnectionString(connString)).Mappings(m =>{foreach (var item in assemblys){m.FluentMappings.AddFromAssembly(Assembly.Load(item));}}).BuildSessionFactory();}return sessionFactory.OpenSession();
}OpenSession((connString: "server=192.168.0.211; user id=root; password=lt1234; database=pnavrds", assemblys: new string[] { "Pnavrds.Data" });

.NET和NHibernate并不天然支持mysql,所以要在项目添加对mysql.data.dll的引用。mysql.data.dll在mysql的安装目录里有。
比如在 C:\Program Files (x86)\MySQL\Connector.NET 6.9\Assemblies\v4.5

2、WebAPI
有关路由问题。
别看api与MVC很像,但是,MVC支持Area,而api并不。
但是开始时我并不知道。轻车熟路地加了个Area,一访问,直接404。
路由如下:

public override void RegisterArea(AreaRegistrationContext context)
{context.MapRoute("Test_default","Test/{controller}/{id}",new { id = UrlParameter.Optional });
}

咋办呢?难道各种控制器济济一堂一锅粥?后来网上查了资料,添加了一个路由,改为:

public override void RegisterArea(AreaRegistrationContext context)
{context.Routes.MapHttpRoute("Test_defaultAPI","api/Test/{controller}/{id}",new { id = RouteParameter.Optional });context.MapRoute("Test_default","Test/{controller}/{action}/{id}",new { action = "Index", id = UrlParameter.Optional });
}

注意,这样处理之后,同一个控制器,就有两个地址都可以访问。一个有区域,一个没有区域:

http://localhost/Pnavrds.API/api/Test/Dev3/10
http://localhost/Pnavrds.API/api/Dev3/10

因为asp.net webapi并不支持区域,不管你这个控制器放在哪个文件夹、哪个命名空间下,它都顽强地解释到根目录下。我们上面做的努力,仅仅是多了一个含有区域名称的地址而已。

参考资料

3、Autofac
这个东东是个好东东。我现在都有点离不开它了。不然那么多实例需要构造,然后每个构造函数都N多参数,太麻烦。但是,因为了解不够,每次用它,好像都要费一些周折,并且很难调试。
这次也不例外。

1)提示System.Web.Http的版本不对。
引用的system.web.http.dll版本为5.2.3.0,但系统说跟5.2.0.0对应不上,编译时虽然可以通过,但有警告,建议在app.config里写些啥啥啥。我找遍了代码,都看不到哪里声明了5.2.0.0。

后来还是根据编译器的提示,将它给出的代码,加到web.config里,编译警告就没有了,运行就再无这个错误:

<runtime>    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"><dependentAssembly><assemblyIdentity name="System.Net.Http.Formatting" culture="neutral" publicKeyToken="31bf3856ad364e35" /><bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" /></dependentAssembly></assemblyBinding><assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"><dependentAssembly><assemblyIdentity name="Iesi.Collections" culture="neutral" publicKeyToken="aa95f207798dfdb4" /><bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" /></dependentAssembly></assemblyBinding><assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"><dependentAssembly><assemblyIdentity name="Autofac" culture="neutral" publicKeyToken="17863af14b0044da" /><bindingRedirect oldVersion="0.0.0.0-3.5.0.0" newVersion="3.5.0.0" /></dependentAssembly></assemblyBinding><assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"><dependentAssembly><assemblyIdentity name="System.Web.Http" culture="neutral" publicKeyToken="31bf3856ad364e35" /><bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" /></dependentAssembly></assemblyBinding></runtime>

附上编译信息:


4>C:\Program Files (x86)\MSBuild\14.0\bin\Microsoft.Common.CurrentVersion.targets(1819,5): warning MSB3247: 发现同一依赖程序集的不同版本间存在冲突。在 Visual Studio 中,请双击此警告(或选择此警告并按 Enter)以修复冲突;否则,请将以下绑定重定向添加到应用程序配置文件中的“runtime”节点: <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"><dependentAssembly><assemblyIdentity name="System.Net.Http.Formatting" culture="neutral" publicKeyToken="31bf3856ad364e35" /><bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" /></dependentAssembly></assemblyBinding><assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"><dependentAssembly><assemblyIdentity name="Iesi.Collections" culture="neutral" publicKeyToken="aa95f207798dfdb4" /><bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" /></dependentAssembly></assemblyBinding><assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"><dependentAssembly><assemblyIdentity name="Autofac" culture="neutral" publicKeyToken="17863af14b0044da" /><bindingRedirect oldVersion="0.0.0.0-3.5.0.0" newVersion="3.5.0.0" /></dependentAssembly></assemblyBinding>

2)说控制器没有默认构造函数
这说明autofac没有正常运行,否则不会报这个错。构造实例正是autofac的工作。

后来改了autofac的builder内容。代码如下:

public class AutofacConfig
{public static void BuildContainer(){var builder = new ContainerBuilder();//Infrastructure objectsbuilder.RegisterApiControllers(typeof(WebApiApplication).Assembly);builder.RegisterAssemblyTypes(typeof(WebApiApplication).Assembly).AsImplementedInterfaces();builder.RegisterModule(new AutofacWebTypesModule());//其他代码.....builder.RegisterModelBinderProvider();builder.RegisterFilterProvider();IContainer container = builder.Build();//DependencyResolver.SetResolver(new AutofacDependencyResolver(container));GlobalConfiguration.Configuration.DependencyResolver = (new AutofacWebApiDependencyResolver(container));}
}

转载于:https://www.cnblogs.com/leftfist/p/6808683.html

mysql + Fluently NHibernate + WebAPI + Autofac相关推荐

  1. Fluently NHibernate 插入CLOB字段

    ORA-01461: can bind a LONG value only for insert into a LONG column 插入oracle某表时报的错. 查来查去,是插入的某个字段值超长 ...

  2. mysql nhibernate_C#连接Mysql数据库NHibernate

    一.什么是NHibernate? NHibernate是一个面向.NET环境的对象/关系数据库映射工具.对象/关系数据库映射(object/relational mapping,ORM)这个术语表示一 ...

  3. nhibernate 配置mysql_利用NHibernate与MySQL数据库交互

    本文章使用Visual Studio作为开发工具,并建立在已经安装MySQL数据库的前提. NHibernate是一个面向.NET环境的对象/关系数据库映射工具.官网:http://nhibernat ...

  4. nhibernate mysql配置_MySql(一)_利用NHibernate和MySql交互

    1.基础配置,添加MySql和nHibernate的引用 (1)   添加引用,导入MySql.data.dll:   利用MySql提供的API操作: (2) 添加引用,导入NHibernate.d ...

  5. mysql nhibernate_MySql(一)_利用NHibernate和MySql交互

    1.基础配置,添加MySql和nHibernate的引用 (1)   添加引用,导入MySql.data.dll:   利用MySql提供的API操作: (2) 添加引用,导入NHibernate.d ...

  6. 服务器和网页接口,WebApi架构详解,WebApi接口搭建与部署WebApi服务器

      WebApi架构详解,WebApi接口搭建与部署WebApi服务器 本文关键词:WebApi架构, WebApi接口搭建, WebApi部署 1. Api是什么? API(Application ...

  7. nhibernate的关系

    用nhibernate,觉得比较难把握的是其中表间的关系. 我用的是Fluently Nhibernate,直接用代码,而不是XML来书写代码与数据表的映射.其中表间关系有3种: 1.Referenc ...

  8. vs和mysql做管理系统_FytSoaCms0: CMS内容管理系统 使用NetCore2.1开发, Vs2017 数据Mysql...

    2018-12-22更新 增加MemoryCache缓存和RedisCache缓存 CoreSDK升级到2.2 增加前台网站示例--演示地址:点击查看 2018-12-15更新 媒体资源库增加本地管理 ...

  9. Orchard详解--第一篇 介绍

    Orchard是一个开源的内容管理系统(CMS),它提供了简单的向导式的安装方法,用于快速建站(如WordPress).对于.Net的开发者来说,Orchard有更好的学习价值,所以本系列文章将对Or ...

最新文章

  1. 遍历同辈节电的方法_家用节电小常识:一些行之有效的节能方法
  2. Android开源项目SlidingMenu本学习笔记(两)
  3. 后端直接跳转前端页面_WEB前端开发中页面跳转等待时间过长如何解决?
  4. 限制排列与棋盘多项式
  5. MySQL数据库的datetime与timestamp
  6. [leedcode 215] Kth Largest Element in an Array
  7. 统计一个整数的所有因子的个数_【题解循环嵌套】1095:数1的个数
  8. 机器学习 —— 浅谈贝叶斯和MCMC
  9. 求数列1/3到1/n之和
  10. JEECG(J2EE Code Generation) 基于代码生成器J2EE智能开发框架 杂记:发布新版本 JEECG_v2.0
  11. python中什么是主要数据类型_python中基本数据类型是什么
  12. 统计订单:复选+全选+计算 的列表
  13. 实习成长之路: MySQL三 : 事务隔离:为什么你改了我还看不见?
  14. 如何给页面加能够临时会话的QQ
  15. ovm安装过程及中断处理
  16. 计算机组成原理00h,计算机组成原理 (2).doc
  17. 下载Windows ARM版本记录
  18. STM32应用(七)JY901九轴姿态模块(串口DMA空闲中断和I2C通信)
  19. vos3000 更换ip具体操作方法
  20. 如何对Windows 2000中出现的“Stop 0x0000007B”错误信息进行故障诊断 1

热门文章

  1. 网络通信基础:ICMP基础通识
  2. 机器人 陆梅东_机器人知识与实践比赛获奖 - 上海徐汇区青少年活动中心
  3. 网络管理技术(Network Administrative Techniques)
  4. 【FPGA】单端口RAM的设计(异步读、同步写)
  5. FPGA中有限状态机的状态编码采用格雷码还是独热码?
  6. 【 Verilog HDL 】循环语句总结
  7. 咱们来聊聊快速失败和安全失败
  8. .NET中IDisposable接口的基本使用
  9. linux下防火墙的管理工具firewall-cmd
  10. 使用JCOOKIES创建http cookie