近期开发中遇到的问题总结
最近准备把后台管理系统重新设计开发下,使用了bootstrap,在网上找了个漂亮的后台模板:sb2-admin,在使用中遇到了不少问题,总结下,以免以后忘记。
1、EF5利用NuGet升级到EF6后,一些Attribute冲突[未解决]: 我原先的数据驱动使用的是Fluent Nhibernate +Nhibernate+MSSQL2005,本来想玩玩EF的,而且现在新创建的MVC项目模板中,都会自带EF。因为EF5不支持项目模板生成Code First,所以升级到了EF6,设置到升级以后麻烦来了。“System.ComponentModel.DataAnnotations” 这个命名空间同时存在于2个dll中,原先我的想法很简单,我不引用就好了,可删除引用后,还是提示冲突。后来我想可能是webconfig或者package中有问题,可查了半天还是没有问题。群里的朋友说是缓存的问题,重启了iisexpress,重启了电脑,都没有办法解决,实在没有办法,放弃了EF方式,还是使用了原先的数据驱动。(PS:哪位大侠有解决方案的,可以留言下,主要冲突是TableAttribute等一些标记性特性)
2、FluentNhibernate 不支持存储过程 一直以为没有使用FN进行存储过程的操作,这次因为后台首页想统计下数据,就利用了存储过程,但在使用中却发现FN目前还不支持存储过程(点击查看官方),没有办法,只能利用Fluent Configuration和HBM Configuration混合的映射方式。
这里要注意的是:
a)存储过程返回的数据,最好重新定义一个class,并且进行映射(可以使用FN或者HDM方式)
b)把新定义的class和映射的hbm文件,放到你的Model层,这是为了方便以后的管理。
c)映射存储过程的hdm文件名,以返回类型的名称命名。(如果返回的class命名为:DataResult,hbm的文件名为:DataResult.hbm.xml)
class:
public class TravelDefaultData
{
public virtual int UserCount { get; set; }
public virtual int OrderCount { get; set; }
public virtual int LineCount { get; set; }
public virtual int CrusiseCount { get; set; }
}
hbm:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Travel.Domain" namespace="Bus.Travel">
<sql-query name="GetTravelData">
<return class="TravelDefaultData">
<return-property column="usercount" name="UserCount" />
<return-property column="ordercount" name="OrderCount" />
<return-property column="linecount" name="LinCrusiseCount" />
</return> EXEC [GetTravelData] :userStartDate, :orderStartDate, :lineStartDate, :crusiesStartDate </sql-query>
</hibernate-mapping>
TravelDefaultData的映射,可以参考这里。
最后记得配置下混合映射:
var db = Fluently.Configure()
.Database(GetSqlConfig())
.Mappings(a =>
{
a.FluentMappings.AddFromAssemblyOf<AreaMap>();
a.HbmMappings.AddClasses(typeof(TravelDefaultData));
});
return db.BuildSessionFactory();
配置以后就能按照NHibernate的方式进行使用了。
3、在使用Web Api的时候,返回类型序列化冲突:
因为用的新模板很炫,想把数据请求都使用Web Api来进行,但在使用的时候,返回的json数据中,都返回了<字段名>k_BackingField,这下傻了,查看了文档,说在属性或者字段标记中,使用DataContactAttribute和DataMemberAttribute,试了以后,发觉还是不行。
后来通过Google后,才知道,原来是SerializableAttribute和DataContractAttribute之间的问题,返回Json数据的时候,使用SerializableAttribute的方式进行序列化了,所以我们必须在Application_Start时,配置下,让其在序列化的时候,仅仅使用Web Api Json serialization(仅仅支持DataContact和DataMember)。
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
//配置在webpi的时候,仅仅支持DataContact
var serializerSettings =GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings;
var contractResolver =(DefaultContractResolver)serializerSettings.ContractResolver;
contractResolver.IgnoreSerializableAttribute = true;
}
写在最后
之前一直感觉用百度就足够了,但现在看来,在技术方面的查询,还是Google比较给力,这些问题很多都是靠Google解决的。最近因为V**到期了,所以一直没有用Google,最近实在憋不住,重新买了个V**,用下来不错,价格也不贵,大家可以用下:用力敲。可以利用浏览器,进行自动切换模式,很方便。方法点击查看。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- PAT (Basic Level) Practice (中文)1017 A除以B (20 分)
- git commit 提交规范
- 非常量的引用左值问题
- PAT (Basic Level) Practice (中文)1019 数字黑洞 (20 分)
- 从 12.9K 开源项目学到的新东西
- PAT (Basic Level) Practice (中文)1048 数字加密 (20 分)
- 一、类加载的双亲委托机制详解
- PAT (Basic Level) Practice (中文)1021 个位数统计 (15 分)
- PAT (Basic Level) Practice (中文)1049 数列的片段和 (20 分)
- PAT (Basic Level) Practice (中文)1022 D进制的A+B (20 分)
- [900]mysql字符串数字互转
- 技术分享 | Semi-join Materialization 子查询优化策略
- 前端性能和错误监控
- Network在单细胞转录组数据分析中的应用
- PAT (Basic Level) Practice (中文)1024 科学计数法 (20 分)