1、VS 2010(2012)中项目SVN状态全部变为新添加:
解决方法:
更新VS Ankhsvn插件,更新方法很简单,去官网下最新插件,然后安装时选择修复即可。 如果上面的方法还不能解决,尝试clean up下项目,或许有用。
2、VS 2010(2012)语法智能提示消失:
解决方法:
Tools -> Options -> Text Editor -> All Languages [or specific language] -> General -> Statement completion -> tick "parameter information" 和 "auto list member" 功具->选项->文字修改器->所有语言->常用->句子完结-> 勾选 "parameter information" 和 "auto list member" 这样之后还是不行的话,再进行下面操作: 开始->Microsoft Visual Studio 2010->Visual Studio Tools->Visual Studio 2010命令提示,进入Common7\IDE。 然后输入:devenv.exe/setup /resetuserdata /resetsettings
后面这种方法简单粗暴,我某一次使用之后VS的SVN插件也失效了
3、数据库中记录不存在导致出现“null不能强制转换成decimal类型”异常
var users= db.Users; // users为IQuerable<User>对象 var totalAmount = users.Sum(c => c.Amount);
上面Amount为decimal类型,如果数据库中user表中无记录,则会抛出“null不能强制转换成decimal类型”。
问题在于users集合为空,这样取c.Amount得到的是null,更正为如下:
var users= db.Users; // users为IQuerable<User>对象 var totalAmount = users.Any() ? users.Sum(c => c.Amount) : 0;
4、文件上传时的诡异BUG
在前端这样指定:
@using (Html.BeginForm("SaveDifferenceDetail", "ChannelCharges", new { enctype = "multipart/form-data"
})) { ... }
后台这样处理:
public ActionResult SaveDetail...HttpPostedFileBase differenceFile) { ... }
differenceFile始终为null,百思不得其姐。最后前端代码换成这样:
@using (Html.BeginForm("SaveDifferenceDetail", "ChannelCharges", FormMethod.Post, new { enctype = "multipart/form-data"
})) { ... }
才搞定,感觉是ASP.NET MVC4的一个“坑”吧!
5、SVN问题 - clean up failed to process the following path...database is locked
先备份文件夹下的内容,然后删除文件夹的内容,然后SVN Update,然后将备份内容拷贝到文件夹下合并。
6、Multiple object sets per type are not supported
// 这个问题的原因是因为EF Container类中包含两个冲突的实体集,比如下面: public virtual IDbSet<customer_contract> CustomerContracts { get; set; } public virtual IDbSet<customer_contract> customer_contract { get; set; }
7、AnkhSVN插件重装后在VS 2012中找不到
工具 -> 选项 -> 源代码管理 -> 插件选择,选择AnkhSVN插件
8、LINQ to Entities 不识别方法“Int32 Parse(System.String)”,因此该方法无法转换为存储表达式
问题代码如下:
var configRegion = db.ConfigRegions.FirstOrDefault(c => c.city_code == cityId);
原因主要是因为LINQ语句是延迟加载的:
Linq是延迟加载的,一个Lambda语句结束时,生成的并不是结果集,而是一个SQL指令集,只有当程序请求该结果集的值的时候,才会实际执行该SQL指令查询出结果。
所以如果你的LinqToSQL语句中包含有无法转译为SQL的代码段的时候,就会抛出异常,这类错误通常发生于对筛选条件执行函数操作。
而ToList,AsEnumerable之类的方法都需要把数据实际压入新的数据结构中,执行这类方法会立即执行LinqToSQL语句,然后对生成的中间集进行Linq查询的时候,调用的是LinqToEntity的底层代码,不会再抛出SQL转译的异常。
.ToList()先将整个表的数据加载到内存中了
然后后边的查询都是LINQ TO Object查询了,已经不是LINQ TO EF了
9、ToDictionary使用陷阱
contractBalances.GroupBy(c => c.contract_id) .ToDictionary(g => g.Sum(r => r.occur_amount), g => new { ... })...
ToDictionary过程实际上相当于不断调用Add(key, value),而这里以g.Sum(r => r.occur_amount)为Key,极可能存在Key冲突的情况,所以应该换成这样:
contractBalances.GroupBy(c => c.contract_id) .ToDictionary(g => g.Key, g => new { })