小编Ben*_*son的帖子

LINQ .Cast()扩展方法失败但(类型)对象有效

要在一些LINQ to SQL对象和DTO之间进行转换,我们在DTO上创建了显式的转换运算符.这样我们就可以做到以下几点:

DTOType MyDTO = (LinqToSQLType)MyLinq2SQLObj;
Run Code Online (Sandbox Code Playgroud)

这很好用.

但是,当您尝试使用LINQ .Cast()扩展方法进行强制转换时,它会抛出一个无效的强制转换异常,表示无法将类型Linq2SQLType强制转换为DTOType类型.即以下不起作用

List<DTO.Name> Names = dbContact.tNames.Cast<DTO.Name>()
                                               .ToList();
Run Code Online (Sandbox Code Playgroud)

但下面的工作正常:

DAL.tName MyDalName = new DAL.tName();
DTO.Name MyDTOName = (DTO.Name)MyDalName;
Run Code Online (Sandbox Code Playgroud)

以下也行得正常

List<DTO.Name> Names = dbContact.tNames.Select(name => (DTO.Name)name)
                                               .ToList();
Run Code Online (Sandbox Code Playgroud)

为什么.Cast()扩展方法会抛出无效的强制转换异常?我过去曾经多次使用.Cast()扩展方法,当你将类似基类型的类型转换为派生类型时,它可以正常工作,但是当对象有一个显式的强制转换操作符时,它就会失效.

c# linq extension-methods casting

18
推荐指数
1
解决办法
5346
查看次数

重复调用dbo.TempGetStateItemExclusive3

我正在调查我们的网站使用SQL服务器管理会话的问题.该网站是基于sitecore CMS的asp.net webforms.我们在各种环境中拥有相同的代码,例如QA,登台和制作.

在生产中,我们所看到的是,我们定期获得快速增长的CPU使用率,这与CPU与服务器的流量无关.随着这个CPU峰值,我们看到网络I/O相应的峰值.

我们的监控软件不区分流量到互联网和流量到数据库服务器; 但是,我们在数据库服务器上看到的内容实际上是dbo.TempGetStateItemExclusive3在asp会话数据库中每秒数百次调用,所有这些都是针对相同的会话ID,并且没有相应数量的页面请求进入Web服务器.

使用相同的代码和配置,我们根本看不到其他环境的这种行为.我们也没有看到其他会话ID,只是这一个特定的.

从数据库中删除行只会导致使用相同的会话ID重新创建该行.

UPDATE

我在事件日志中发现了这个错误:

Violation of PRIMARY KEY constraint 'PK__ASPState__C9F49290145C0A3F'. Cannot insert duplicate key in object 'dbo.ASPStateTempSessions'. The duplicate key value is (sessionidwiththeproblem). The statement has been terminated.
Stack trace:

at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean\ breakConnection)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()
at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand\ cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler,\ TdsParserStateObject stateObj)
at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds,\ RunBehavior runBehavior, String resetOptionsString)
at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior,\ RunBehavior runBehavior, Boolean returnStream, Boolean async)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior,\ RunBehavior runBehavior, …
Run Code Online (Sandbox Code Playgroud)

sql-server asp.net sitecore session-state

13
推荐指数
2
解决办法
9466
查看次数

LINQ to SQL交叉应用

我想在LINQ中创建一个带有交叉应用的查询到用户定义的表值函数.SQL将非常简单,如下所示:

SELECT *
FROM MyTable mt
CROSS APPLY MyTVF(mt.id)
Run Code Online (Sandbox Code Playgroud)

这篇文章给出了一个LINQ查询示例,该查询导致生成的sql既包含交叉应用又包含外部应用,但仅用于不用于tvf的子查询. 文章证实,LINQ to SQL中会产生交叉应用和外部应用运营商"的关系导航"但我不知道是什么,在这里指. 这个post描述了我想要做的事情,答案说这样做的唯一方法是将SQL查询包装在存储过程中,然后通过LINQ调用sp.我希望这不是真的,因为我实际上需要一个可以在多个LINQ查询中的应用程序中使用这种方式的tvf,因此"将它包装在sp中"对我来说不起作用.有没有人知道通过LINQ获得类似上面的简单SQL语句的方法?

.net linq linq-to-sql cross-apply

11
推荐指数
1
解决办法
5078
查看次数

如何使用web API odatamodelbuilder来处理EF流畅的API映射

我使用pocos创建了一个相当简单的域模型.我已经使用EntityTypeConfiguration<TEnitityType>类将它们映射到EF DB上下文.一切正常.

我现在正在尝试使用a创建一个OData V4 WebAPI控制器端点ODataConventionModelBuilder,这就是事情即将发生的地方.一切正常,直到它遇到一个非常规的关联.但我无法找到一种方法来ODataBuilder从我的EntityTypeConfiguration<TEnitityType>课程中获取映射.

这留下了2个令人不快的选择

  • 用脏的属性装饰我可爱干净的pocos.
  • 使用.手动重新映射所有非基于约定的映射 ODataBuilder

不确定代码示例是否会有所帮助,但无论如何,我已经简化了实体以简化.

var builder = new ODataConventionModelBuilder();

            builder.EntitySet<Item>("Items");
            config.MapODataServiceRoute(
                routeName: "odata",
                routePrefix: "odata",
                model: builder.GetEdmModel(),
                batchHandler: new DefaultODataBatchHandler((GlobalConfiguration.DefaultServer)));

 public class Item
    {
        public Int32 Id { get; set; }

        public Int16 ItemTypeId { get; set; }                   

        public virtual ItemType Type { get; set; }
        public virtual ICollection<ItemVersion> Versions { get; set; }
        public virtual ICollection<ItemTag> Tags { get; set; }     
    }
Run Code Online (Sandbox Code Playgroud)

遇到ItemTags集合时出现问题,这里是ItemTag:

public class …
Run Code Online (Sandbox Code Playgroud)

entity-framework odata asp.net-web-api

11
推荐指数
1
解决办法
2328
查看次数

为什么C#编译器不能通过switch语句跟踪所有代码路径

以下代码工作正常:

ListControl lstMyControl;

if (SomeVariable == SomeEnum.Value1)
{
   lstMyControl = new DropDownList();
}
else
{
   lstMyControl = new RadioButtonList();
}

lstMyControl.CssClass = "SomeClass";
Run Code Online (Sandbox Code Playgroud)

以下代码无法编译:

ListControl lstMyControl;

    switch (SomeVariable)
    {
       case SomeEnum.Value1:
       lstMyControl = new DropDownList();
       break;
       case default:
       lstMyControl = new RadioButtonList();
       break;
    }

lstMyControl.CssClass = "SomeClass";
Run Code Online (Sandbox Code Playgroud)

在第二个例子中,编译器说我正在尝试在尚未实例化的变量上设置属性.在任何一种情况下,必须实例化lstMyControl,但compilr似乎无法通过switch语句遵循该代码路径来查看.在上面的简单示例中,我将使用if/else.但是有几次我想用10个不同的类做这样的事情,这些类都继承自同一个基类,并且当一个switch语句是我应该使用的时候,有10个if/elseif语句很烦人.

c# polymorphism compilation

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

如何使用Html.GetUnobtrusiveValidationAttributes()

我试图解决这样一个事实:当他们编写asp.net MVC 3时,他们忘记包含代码来添加不显眼的验证属性到选择列表,他们的"修复"就是将它包含在MVC 4中,这不是血腥的使用MVC 3的任何人.

我建议的解决方法是使用Html.GetUnobtrusiveValidationAttributes()自己添加它们,就像任何其他自定义属性一样,但我无法确定调用方法的正确语法.有2个重载,一个接受一个字符串,另一个接受一个字符串和一个ModelMetaData类.我理解元数据参数,我认为我只是传入ViewData.ModelMetadata但字符串应该是什么?MSDN文档说它是"指定的HTML名称属性",这对我来说毫无意义.HTML名称属性是什么?选择清单?为什么它需要它以及它如何帮助它知道我的模型上我想要验证的属性?查看使用示例,他们似乎都传递了我的模型上属性的名称,我想要验证属性,这是有道理的.不幸的是,无论我传递什么,我都无法让方法返回任何空集合.

我的模型类叫做Event,我的属性叫做EventTypeID.我使用稍微不同的viewmodel类作为视图的基础,因为我需要显示事件列表,并且还允许在同一视图上输入新事件,因此我有一个简单的viewmodel类,如下所示:

public class EventViewModel
{
    public Model.Event NewEvent { get; set; }
    public IEnumerable<Model.Event> Events { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

下拉列表映射到属性,如:@Html.DropDownListFor(model => model.NewEvent.EventTypeID我将作为字符串传递给Html.GetUnobtrusiveValidationAttributes(string)Html.GetUnobtrusiveValidationAttributes(string, ModelMetadata)获取此属性的属性.我试过了:

Html.GetUnobtrusiveValidationAttributes("EventTypeID")
Html.GetUnobtrusiveValidationAttributes("EventTypeID",ViewData.ModelMetadata)
Html.GetUnobtrusiveValidationAttributes("NewEvent.EventTypeID")
Html.GetUnobtrusiveValidationAttributes("NewEvent.EventTypeID",ModelMetadata)
Run Code Online (Sandbox Code Playgroud)

他们都返回一个空集合.

我知道我的模型是正确的,因为如果我将调用更改Html.DropDownListForHtml.TextBoxFor然后验证"正常工作",除了将验证属性添加到我的模型类之外,我不需要做任何事情.

编辑:

刚尝试关闭客户端验证,验证在所有选择列表的服务器端都很好.

c# asp.net-mvc unobtrusive-validation asp.net-mvc-3

8
推荐指数
3
解决办法
5474
查看次数

CruiseControl.net网络仪表板安全性

我在向Web仪表板添加安全性时遇到了极大的问题.我正在尝试为一堆Web应用程序项目设置安全性.一切正常,没有启用安全性.

我想要的安全性非常简单.2个角色"Releasers"和"Testers",发布者可以做任何事情,测试人员可以强制构建测试部署项目,只查看所有升级实时安装的项目.但是我无法让它发挥作用.作为一个开始,我想我已经允许每个人的一切,我得到一些不同的问题取决于我如何设置各种东西.在所有情况下,配置文件都使用validator util进行验证.

服务器配置

 <internalSecurity>    
    <users>
      <ldapUser name="ccnet" domain="localhost" />
      <passwordUser name="ccnetadmin" password="NotTheRealPW" />      
    </users>
    <permissions>
      <rolePermission name="Releasers" defaultRight="Allow">
        <users>
          <userName name="ccnetadmin"/>
        </users>
      </rolePermission>
      <rolePermission name="Testers" defaultRight="Allow">
        <users>
          <userName name="ccnet"/>
        </users>
      </rolePermission>
    </permissions>
  </internalSecurity>
Run Code Online (Sandbox Code Playgroud)

项目安全

<security type="defaultProjectSecurity" defaultRight="Inherit">
      <permissions>
        <rolePermission name="Testers" ref="Testers"/>
        <rolePermission name="Releasers" ref="Releasers"/>        
      </permissions>
    </security>
Run Code Online (Sandbox Code Playgroud)

Dashboard.config

文档中有三件事情不清楚.

  • 需要在IIS中设置哪种身份验证.
  • 我需要在ccnet.config服务器安全性部分中设置哪些类型的用户.
  • 在仪表板配置中,我在本<securityPlugins>节中需要什么.

我已经尝试了在web.config和iis中集成的表单和窗口.对于表单,它基本上抱怨没有login.aspx,但是我不怀疑这是正确的.通过集成Windows,我可以访问仪表板.我可以在列表中看到任何没有安全元素的项目,但任何操作都会导致安全异常,说我没有ViewProject权限.任何具有安全元素的项目都不会显示在列表中.无论用户使用的是simpleUser,passwordUser还是ldapUser,我都会得到相同的行为.我找不到任何可以提到securityPlugins除simpleSecurity之外的其他值的任何其他值,是否有任何其他值,如果是这样,它们是什么.

我搜索了这个文档,我找不到任何这些问题的答案.

编辑

无论谁能建议我能达到以下目标,都会得到赏金,即使它与我上面描述的完全不同.

我想要一组用户可以查看所有CC.net项目并强制构建1特定项目.我想要另一组用户可以查看并强制构建所有项目.我希望它与一个cc.net仪表板,一个配置文件,但具有不同的用户帐户.

编辑2

由于赏金即将耗尽,我也会给予任何能够提供某种令人信服的证据证明cc.net中的安全性不起作用的人,所以至少我知道不要再浪费时间了.此外,我已经尝试记录一个问题或发布到cc.net论坛有关这个,但他们似乎已转换到一个新系统,这似乎无法正常工作,它只是不会让你注册一个用户帐户,它需要电子邮件验证,但电子邮件永远不会通过.

cruisecontrol.net ccnet-config

7
推荐指数
1
解决办法
3952
查看次数

iTextSharp从现有PDF模板生成PDF

我正在研究使用C#和iTextSharp创建一些东西的可行性,它可以采用PDF模板并用从数据库中检索的实际值替换各种占位符值.基本上是PDF邮件合并.我有iText的动作书,但它涵盖了很多我不需要的东西,我很难找到任何与我想做的事情有关的东西.我很乐意使用PDF字段作为占位符,只要合并/展平的表单看起来不像它有字段,输出文档应该看起来像邮件合并字母而不是已填写的表单.一个理想的世界我只想搜索PDF的文本内容,然后用正确的字段值替换文本占位符和邮件合并.

任何人都可以告诉我最好的方法,并指出我要使用的最有用的iTextSharp类的方向,或者如果你知道iText in Action预订了一个指向最有用的部分供我阅读.

c# pdf itextsharp

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

iTextSharp正在生成一个损坏的PDF

下面的代码片段返回一个损坏的PDF文档,但是如果我返回mergedDocument,它总是返回一个有效的PDF.mergedDocument基于我使用Word创建的PDF文件,而完成的文档完全以编程方式生成.代码"有效",因为它不会抛出异常.为什么iTextSharp会创建一个损坏的PDF?

byte[] completedDocument = null;            
using (MemoryStream streamCompleted = new MemoryStream())
{
    using (Document document = new Document())
    {                    
        PdfCopy copy = new PdfCopy(document, streamCompleted);
        document.Open();
        copy.Open();                    

        foreach (var item in eventItems)
        {
            byte[] mergedDocument = null;
            PdfReader reader = new PdfReader(pdfTemplates[item.DataTokens[NotifyTokenType.OrganisationID]]);
            using (MemoryStream streamTemplate = new MemoryStream())
            {
                using (PdfStamper stamper = new PdfStamper(reader, streamTemplate))
                {
                    foreach (var token in item.DataTokens)
                    {
                        if (stamper.AcroFields.Fields.Any(fld => fld.Key == token.Key.ToString()))
                        {
                            stamper.AcroFields.SetField(token.Key.ToString(), token.Value);
                        }
                    }
                    stamper.FormFlattening = true;
                    stamper.Writer.CloseStream = false; …
Run Code Online (Sandbox Code Playgroud)

.net c# itext itextsharp

6
推荐指数
1
解决办法
6957
查看次数

Visual Studio 2008 ASMX文件

这在技术上不是一个编程问题,但它确实与一个使用频繁的编程工具有关,所以我认为这是正确的地方.

在Visual Studio 2008中,如果我有一个ASMX web服务和我双击该文件ASMX它打开asmx.cs文件,这是非常明智作用似乎因为有刚在实际ASMX文件的单行指令.但是,如果我直接单击asmx.cs文件,它会尝试在"设计"模式下打开它,即aspx文件的模式,它会向您显示可视化设计器而不是标记.结果是你得到一个灰色的屏幕,说这个文件类型无法在设计模式下查看,或者你只是得到一个奇怪的visual studio异常处理页面.我正在做的就是双击asmx.cs页面.如果有人有兴趣,我可以发布截屏.我在我的同事机器上也观察到了这种行为,所以在我的特定安装上似乎没有一些奇怪的怪癖.有人观察过这种行为吗?任何人都可以复制它吗?这是一个错误吗?有没有修复它的服务包?这是一些我无法找到的奇怪设置.它不是一个显示停止因为双击asmx文件打开相关的代码文件,但我想尽可能修复它.

visual-studio-2008 visual-studio

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