小编Der*_*rek的帖子

避免使用数字数据类型的.NET扩展方法?

假设我想在.NET中的数字数据类型中添加一个名为IsOdd()的扩展方法.但是,对于Int16,Int32,Int64等数据类型,此实现几乎是相同的,除了为扩展方法定义的参数.我真的不喜欢这种冗余,但想知道是否有办法避免它.

有没有更好的方法来处理这个?相反,我应该为System.Math实现扩展方法并为IsOdd()创建重载定义?简而言之,我很好奇数字数据类型的扩展方法是否应该完全避免,因为它们具有固有的冗余性.

c# extension-methods

9
推荐指数
1
解决办法
1396
查看次数

iPad上的Safari偶尔也无法识别ASP.NET回发链接

在运行iOS 6.0的第三代iPad上,在Safari浏览器上运行的ASP.NET Web应用程序中,我很难找到间歇性问题的根源.会发生的情况是,有时,<a>设置为通过JavaScript进行回发的超链接的标签将突然停止工作,如果您在屏幕上触摸它们,它们似乎什么都不做.这些包括设置为注销链接的asp:LinkBut​​ton控件,以及设置为允许行排序的GridView标题行.它背后似乎没有任何押韵或理由 - 它们会正常工作一段时间,然后停止,之后我会注意到它们再次开始工作(主要是在关闭Safari并重新打开它之后,尽管并非总是如此)似乎工作).

注销控件在aspx文件中如下所示:

<asp:LinkButton ID="LogoutButton" onclick="LogoutButton_Click" runat="server">[ Logout ]</asp:LinkButton>
Run Code Online (Sandbox Code Playgroud)

并在生成的HTML中显示为:

<a id="LogoutButton" href="javascript:__doPostBack(&#39;ctl00$LogoutButton&#39;,&#39;&#39;)">[ Logout ]</a>
Run Code Online (Sandbox Code Playgroud)

在iPad上运行的Safari是否有任何特殊之处可能会阻止此类链接偶尔中断,例如页面上或其他打开的浏览器选项卡中加载了太多数据,或者ViewState是否在这种情况下起作用?即使在iPad上使用Web应用程序一段时间后,我找不到任何特定的方法来重新创建问题,所以我甚至无法开始尝试修复它,这真的令人沮丧,所以我正在寻找来自那些开发了ASP.NET应用程序并且非常了解iPad和/或Safari环境的人的指导.我从来没有在桌面浏览器上出现过这个问题.

更新:使用本页概述的有关如何在iPad上向Safari添加伪视图源选项的技巧,我现在能够看到回发链接正在工作的页面生成的HTML的差异,以及它停止的页面.简而言之,ASP.NET通常在页面中嵌入的__doPostBack JavaScript函数......由于某种原因停止嵌入.因此,绑定到链接的JavaScript只会出错.以下是ASP.NET通常添加到页面以使回发链接工作的内容:

<script type="text/javascript">
//<![CDATA[
var theForm = document.forms['form1'];
if (!theForm) {
    theForm = document.form1;
}
function __doPostBack(eventTarget, eventArgument) {
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
        theForm.__EVENTTARGET.value = eventTarget;
        theForm.__EVENTARGUMENT.value = eventArgument;
        theForm.submit();
    }
}
//]]>
</script>
Run Code Online (Sandbox Code Playgroud)

这似乎与Apple支持论坛SO上描述的问题相同.后者表明,ASP.NET有时可能无法将iPad上的Safari识别为支持JavaScript,因此无法在页面中正确插入__doPostBack功能.我的页面上的其他JavaScript仍然可以正常工作,所以它不能完全解释我的问题.

asp.net safari ipad

5
推荐指数
1
解决办法
1万
查看次数

解决EF4中的实体与我们的数据库标准之间的命名约定冲突?

我正在研究用Entity Framework 4替代或补充我们的本地ORM系统,并且我注意到后者可能最终导致我们定义为编程代码和数据库的命名约定之间的冲突。作为Microsoft商店,我们在很大程度上决定遵循Microsoft的代码命名准则,即对成员,名称空间等使用Pascal大小写;避免使用下划线等。

毫不奇怪,EF4中的默认实体命名约定非常适合这些标准。例如,名为实体SalesOrder会生成一个名为类SalesOrder命名和实体集SalesOrders表。默认情况下,EF4 Model-First设计将生成与实体集同名的表(在此示例中,生成的表名为SalesOrders)。但是,我们的数据库标准建议在单词之间使用所有小写和下划线(例如sales_orders)。因此,按原样使用Entity Framework将导致我们开始偏离它们。

实体框架中是否有任何地方可以覆盖它的行为,以使用实体集名称作为SQL表名称?我似乎找不到一个明显的地方为生成的SQL脚本指定备用表名。如果我们继续使用EF4,是让我们重新考虑数据库命名约定的唯一可行的解​​决方案吗?

更新:

我正在尝试下面的Ladislav解决方案,但似乎无法 Entity Framework模型设计器中获取“ 从模型生成数据库”选项来识别我的自定义实用程序。我在文件夹中有一个名为MyOrg.EF.Utility.CS.ttinclude的文件:

%VSINSTALLDIR%\Common7\IDE\Extensions\Microsoft\Entity Framework Tools\Templates\Includes
Run Code Online (Sandbox Code Playgroud)

基本上看起来像这样:

<#@ import namespace="Microsoft.CSharp"#>
<#@ import namespace="System.Text"#>


public class CustomUtilities
{
    public static string EntityNameToSqlName(string name)
    {
        string sqlName = "";    // The table name based on the input model name
        string pattern = "([A-Z]+[s])|([A-Z](?=[a-z]))|((?<=[a-z])[A-Z])";  //Pattern for the regex exp. below

        // Separate out each word with spaces:
        sqlName = System.Text.RegularExpressions.Regex.Replace(name, …
Run Code Online (Sandbox Code Playgroud)

entity-framework naming-conventions entity-framework-4

3
推荐指数
1
解决办法
3550
查看次数