当我们需要在我们的应用程序中进行数据库访问时,我们使用以下模式:为了查询,我们有一个带有方法CreateOpenConnection的静态工厂类这只不过是newSqlConnection(myConnectionString)并调用Open()在上面。在我们执行查询之前调用此方法,并在查询返回后释放连接。对于插入/更新/删除,我们使用工作单元模式,在这种模式下,更改被分批处理并通过调用work.Commit()提交到数据库。像这样:工作.提交:using(vartranScope=newTransactionScope(TransactionScopeOption.RequiresNe
我真的很难在我的应用程序中调整我的EntityFramework生成的查询之一。这是非常基本的查询,但出于某种原因,EF使用多个内部子查询,这似乎在DB中执行得很糟糕,而不是使用连接。这是我的LINQ代码:Projects.Select(proj=>newProjectViewModel(){Name=proj.Name,Id=proj.Id,Total=proj.Subvalue.Where(subv=>subv.Created>=startDate&&subv.Createdc.SubValueSum).DefaultIfEmpty().Sum()}).OrderByDescend
我的问题与thisone有关关于IEnumerable的使用对比IReadOnlyCollection.我也一直使用IEnumerable将集合公开为返回类型和参数,因为它受益于不可变和延迟执行。但是,我越来越担心我的代码中必须枚举参数以避免ReSharper可能给出的多重枚举警告的地方的激增。我理解ReSharper为什么建议这样做,并且我同意它建议的代码(如下)以确保封装(即,不假设调用者)。Foo[]arr=colasFoo[]??col.ToArray();但是,我发现此代码的重复性具有污染性,并且我同意一些消息来源的观点IReadOnlyCollection是一个更好的选择,
在我们的C#MVC项目中,我们将可本地化的字符串存储在.resx文件中。每次我们添加一个新的字符串,VisualStudio都会把它放在文件的底部,这意味着如果在不同的分支中添加两个字符串,那么我们将遇到合并冲突,因为两个不同的代码块被添加到同一个地方。我们如何减少合并冲突?按字母顺序对字符串进行排序可能会有所帮助,但我不知道该怎么做。或者我们可以告诉git处理每个...标记为独立block?我们目前正在使用git,但在使用TFS/TFVC时遇到了同样的问题。 最佳答案 我们发现了ResXManagerVisualStudio扩展,
在我的中型项目中,我为存储库、服务等使用了静态类,它实际上工作得很好,即使大多数程序员的期望相反。我的代码库非常紧凑、干净且易于理解。现在我尝试重写所有内容并使用IoC(控制反转),但我非常失望。我必须在每个类、Controller等中手动初始化许多依赖项,为接口(interface)添加更多项目等等。我真的没有看到我的项目有任何好处,而且似乎它造成的问题多于解决的问题。我在IoC/DI中发现了以下缺点:更大的代码量馄饨代码而不是意大利面条代码性能较慢,即使我要调用的方法只有一个依赖项,也需要在构造函数中初始化所有依赖项不使用IDE时更难理解一些错误被推送到运行时添加额外的依赖(DI框
在C#.net平台上避免SQL注入(inject)的最佳方法是什么。如果有的话,请发布C#实现。 最佳答案 不需要算法-只是不使用字符串连接来构建SQL语句。请改用SqlCommand.Parameters集合。这会执行所有必要的值转义(例如将'替换为'')并确保该命令是安全的,因为其他人(即Microsoft)已经完成了所有测试.例如调用存储过程:using(varconnection=newSqlConnection("..."))using(varcommand=newSqlCommand("MySprocName",conn
最近,我回答了一个关于优化用于生成任意基数的每个排列的可能并行化方法的问题。我发布了一个类似于Parallelized,poorimplementationcodeblocklist的答案,几乎立即有人指出了这一点:Thisisprettymuchguaranteedtogiveyoufalsesharingandwillprobablybemanytimesslower.(credittogjvdkamp)他们是对的,死亡很慢。也就是说,我研究了这个话题,发现了一些interestingmaterialandsuggestions(仅存档MSDN杂志,.NET问题:虚假共享)与它作斗
这更像是一个架构/设计问题。我过去遇到过一些用WPF/WindowsForms等编写的项目,这些项目具有包含很多字段的复杂屏幕,并且这些字段相互连接(它们的值相互依赖,涉及一些逻辑).这些项目是我在实现后接手的,我发现很多事件/数据绑定(bind)hell-我的意思是因为所有这些字段都依赖于其他人,所以他们已经实现了INotifyPropertyChanged并且其他领域正在结果修改。这会导致相同的字段在屏幕加载时被更新5-6次,并且填充字段的顺序会导致可怕的错误。(例如,日期设置在工作类型之前,而不是在工作类型之后,所以我最终得到了不同的工作费用.)更糟糕的是,一些hack是在UI事
我需要计算数组中每对点之间的距离,并且每对只想计算一次。我想出的方法是否足够有效或有更好的方法?这是一个示例,以及解释我要获取的内容的视觉效果:例如,首先获取片段A-B、A-C、A-D;然后是B-C,B-D;最后,C-D。换句话说,我们希望在新数组中使用A-B,而不是B-A,因为它会重复。varpointsArray=newPoint[4];pointsArray[0]=newPoint(0,0);pointsArray[1]=newPoint(10,0);pointsArray[2]=newPoint(10,10);pointsArray[3]=newPoint(0,10);//us
我有一个带有默认参数的接口(interface),我想从实现类的内部调用实现方法(除了从外部)。我也想使用它的默认参数。但是,如果我只是按名称调用方法,我就不能使用默认参数,因为它们只在接口(interface)中定义。我可以在实现方法中重复默认规范,但由于DRY和所有这些细节,这不太可能(尤其是编译器不会检查它们是否与接口(interface)的默认值匹配!)我通过引入一个名为_this的成员来解决这个问题,它与this相同,只是它被声明为接口(interface)类型。然后当我想使用默认参数时,我用_this调用方法。这是示例代码:publicinterfaceIMovable{/