.NET开发问题收集

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 { })
原文地址:https://www.cnblogs.com/feichexia/p/NET_Problems.html