LINQ:指定的强制转换无效间歇性发生

2023-12-25

我有一个应用程序开始偶尔抛出“指定的转换无效”异常。我无法始终如一地重现此错误,这让我和我的用户发疯。

违规代码:

public Complaint GetComplaintById(int Id)
{
    Complaint complaint = (from c in _context.cts_complaints
                           join ud in _context.cts_user_details on c.CreatedBy equals ud.UserId
                           where c.Id == Id
                           select new Complaint
                           {
                              Id = c.Id,
                              CompanyId = c.CompanyId,
                              ComplaintTypeId = c.ComplaintTypeId,
                              CategoryId = c.CategoryId,
                              ReportCategoryId = c.ReportCategoryId,
                              ParentId = c.ParentId,
                              LanguageId = c.LanguageId,
                              AreaId = c.AreaId,
                              Title = c.Title,
                              Description = c.Description,
                              ResponseDue = c.ResponseDue,
                              DateReceived = c.DateReceived,
                              FPSCNumber = c.FPSCNumber,
                              FPSCRepresentative = c.FPSCRepresentative,
                              ContactMethodId = c.ContactMethodId,
                              ContactedBy = c.ContactedBy,
                              CreatedDate = c.CreatedDate,
                              CreatedBy = c.CreatedBy,
                              CreatedByName = ud.Name,
                              Status = c.Status,
                              AttachmentsArchived = c.AttachmentsArchived,
                              Timestamp = c.Timestamp,
                            }).FirstOrDefault();

    complaint.Users = this.GetUsersByComplaintId(Id);

    return complaint;
}

堆栈跟踪:

Specified cast is not valid.
   at System.Data.Linq.SqlClient.SqlProvider.Execute(Expression query, QueryInfo queryInfo, IObjectReaderFactory factory, Object[] parentArgs, Object[] userArgs, ICompiledSubQuery[] subQueries, Object lastResult)
   at System.Data.Linq.SqlClient.SqlProvider.ExecuteAll(Expression query, QueryInfo[] queryInfos, IObjectReaderFactory factory, Object[] userArguments, ICompiledSubQuery[] subQueries)
   at System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(Expression query)
   at System.Data.Linq.DataQuery`1.System.Linq.IQueryProvider.Execute[S](Expression expression)
   at System.Linq.Queryable.FirstOrDefault[TSource](IQueryable`1 source)
   at ComplaintTracking.Business.Data.SqlComplaintRepository.GetComplaintById(Int32 Id) in C:\SourceCode2010\ComplaintTracking\Service Pack\1.0 ComplaintTracking\ComplaintTracking.Business\Data\SqlComplaintRepository.cs:line 20
   at ComplaintTracking.Business.Managers.ComplaintManager.GetComplaintById(Int32 Id) in C:\SourceCode2010\ComplaintTracking\Service Pack\1.0 ComplaintTracking\ComplaintTracking.Business\Managers\ComplaintManager.cs:line 33
   at ComplaintTracking.Web.UserControls.ComplaintViews.ResolveViewPresenter.Init() in C:\SourceCode2010\ComplaintTracking\Service Pack\1.0 ComplaintTracking\ComplaintTracking.Web\UserControls\ComplaintViews\ResolveViewPresenter.cs:line 39
   at ComplaintTracking.Web.Library.BaseUserControl`2.OnLoad(EventArgs e) in C:\SourceCode2010\ComplaintTracking\Service Pack\1.0 ComplaintTracking\ComplaintTracking.Web\Library\BaseUserControl.cs:line 56
   at System.Web.UI.Control.LoadRecursive()
   at System.Web.UI.Control.LoadRecursive()
   at System.Web.UI.Control.LoadRecursive()
   at System.Web.UI.Control.LoadRecursive()
   at System.Web.UI.Control.LoadRecursive()
   at System.Web.UI.Control.LoadRecursive()
   at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

Update:我正在尝试使用存储库模式。我有一个名为 cts_complaints 的 LINQ 2 SQL ORM 对象,它是来自我的 SQL Server 表 dbo.cts_complaints 的 1-1 映射。在我的应用程序中,我有一个名为“投诉”的模型。我的存储库正在从 cts_complaints 映射到投诉。

[HasSelfValidation]
public class Complaint
{
    public Complaint()
    {
    CreatedBy = System.Threading.Thread.CurrentPrincipal.Identity.Name;
    CreatedDate = DateTime.Now;
    DateReceived = DateTime.Now;
    Users = new List<ComplaintUser>();
    }

    public int Id { get; internal set; }
    public int CompanyId { get; set; }
    public int ComplaintTypeId { get; set; }
    public int CategoryId { get; set; }
    public int ReportCategoryId { get; internal set; }
    public int? ParentId { get; set; }
    public int LanguageId { get; set; }
    public int? AreaId { get; set; }
    public string Title { get; set; }
    public string Description { get; set; }
    public DateTime ResponseDue { get; set; }
    public DateTime DateReceived { get; set; }
    public string FPSCNumber { get; set; }
    public string FPSCRepresentative { get; set; }
    public int ContactMethodId { get; set; }
    public string ContactedBy { get; set; }
    public int Status { get; set; }
    public bool AttachmentsArchived { get; set; }
    public DateTime CreatedDate { get; internal set; }
    public string CreatedBy { get; internal set; }
    public string CreatedByName { get; set; }       
    public byte[] Timestamp { get; internal set; }
    public List<ComplaintUser> Users { get; internal set; }

    [SelfValidation()]
    public void ValidateUsers(ValidationResults results)
    {
    //if id is 0 it's new.  There must be user
    if (Users.Count==0)
            results.AddResult(new ValidationResult("You must assign at least one user.", this, "Users", "", null));

    }
}

cts_投诉:

CREATE TABLE [dbo].[cts_complaint](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [CompanyId] [int] NOT NULL,
    [ComplaintTypeId] [int] NOT NULL,
    [CategoryId] [int] NOT NULL,
    [ReportCategoryId] [int] NOT NULL,
    [ParentId] [int] NULL,
    [LanguageId] [int] NOT NULL,
    [AreaId] [int] NULL,
    [Title] [nvarchar](50) NOT NULL,
    [Description] [nvarchar](max) NOT NULL,
    [ResponseDue] [datetime] NOT NULL,
    [DateReceived] [datetime] NOT NULL,
    [FPSCNumber] [nvarchar](50) NOT NULL,
    [FPSCRepresentative] [nvarchar](50) NOT NULL,
    [ContactMethodId] [int] NOT NULL,
    [ContactedBy] [nvarchar](50) NOT NULL,
    [CreatedDate] [datetime] NOT NULL,
    [CreatedBy] [nvarchar](50) NOT NULL,
    [Status] [int] NOT NULL,
    [AttachmentsArchived] [bit] NOT NULL,
    [Timestamp] [timestamp] NOT NULL,
 CONSTRAINT [PK_cts_complaint] PRIMARY KEY CLUSTERED 
(
    [Id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

cts_用户_详细信息:

CREATE TABLE [dbo].[cts_user_detail](
    [UserId] [nvarchar](50) NOT NULL,
    [Name] [nvarchar](50) NOT NULL,
    [Email] [nvarchar](255) NOT NULL,
    [ManagerEmail] [nvarchar](255) NOT NULL,
    [Role] [nvarchar](15) NOT NULL,
    [Timestamp] [timestamp] NOT NULL,
 CONSTRAINT [PK_cts_user_detail_1] PRIMARY KEY CLUSTERED 
(
    [UserId] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

我也遇到了同样的错误,并且问题也间歇性地发生。

原因是数据库中的列类型与 .dbml 文件中的字段类型之间的类型不匹配

因此,也许检查自动生成的 linq2sql 类(即 cts_complaints,而不是我假设您自己编码的模型类 Complaint)中的类型是否与数据库中的类型匹配。

(我的具体情况的详细信息:在 linq2sql .dbml 文件中,有一个类型为 double 的字段,但在数据库中,该列是 datetime - 不确定这是如何发生的 - 也许最初 DB 列和 .dbml 字段具有相同的类型,然后有人更改了数据库中的类型而不重新生成 .dbml 文件)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LINQ:指定的强制转换无效间歇性发生 的相关文章

  • LINQ to SQL:从位于不同服务器上的两个数据库获取记录

    我需要从两个不同的表中获取记录 数据库位于两个不同的 SQL Server 中 例如 销售数据库位于服务器 1 上 采购数据库位于服务器 2 上 销售和采购数据库都有一些表集 例如销售数据库中的 table1 和采购数据库中的 table2
  • Task.Factory.StartNew 或 Parallel.ForEach 对于许多长时间运行的任务? [复制]

    这个问题在这里已经有答案了 可能的重复 Parallel ForEach 与 Task Factory StartNew https stackoverflow com questions 5009181 parallel foreach
  • 如何在 C# 中从这个分层父子结构中查找任何项目

    如何从列表中查找任何项目 因为它是动态的 它可能位于列表的任何位置的父项或子项中 并且当子项计数为0时需要停止查找 下面是列表的模型和分层父子结构示例 例子 父级 gt 子级 gt 子级 gt 子级或父级 gt 子级 gt 子级 gt 子级
  • 演示如何在 C# 4.0 中使用新的“dynamic”关键字

    这是 4 0 版本中新的 C 未来 称为动态 告诉我如何在我的代码中使用它以及这个未来可以如何帮助我 相关问题 新的 dynamic C 4 0 关键字是否弃用了 var 关键字 https stackoverflow com questi
  • 使用 TFS API 在单个查询中检索工作项及其链接的工作项

    有谁知道是否可以检索工作项目及其列表链接的工作项使用 TFS API Web 服务从 TFS 进行一趟 目前 我们必须对第一次调用期间进行的每个工作项进行第二次调用 并且引入了性能问题 如果这不可能 是否有办法查看链接工作项的类型而不检索它
  • WPF 对 DataGrid 内的 TextBlock 进行全局样式设置

    我遇到了一个非常奇怪的问题 我正在尝试将全局样式应用于一个中的多个控件DataGrid 它们中的大多数完全按照我的预期工作 然而 对于TextBlock永远不会被应用 样式为ComboBox TextBox Label 和其他几个都被应用到
  • 直接将 XML 写入磁盘并附加元素

    我正在尝试编写一个 XML 文件 但它太大而无法存储在内存中 因此我想将其直接写入磁盘 我尝试过使用 XmlWriter 但没有功能使我能够附加到文件末尾 因此我愿意使用常规文件编写器来编写 XML 原始数据 有谁知道任何文件写入类使我能够
  • 计算另一个表达式中的 C# 表达式

    我想在另一个表达式中使用一个表达式 Expression
  • 扫描目录“User\Documents\My Music”时出现 UnauthorizedAccessException

    问题 为什么我在扫描用户的 我的文档 文件夹时出现此错误 但在扫描 我的音乐 我的图片 我的视频 目录时却没有出现此错误 次要 不太重要的问题 我正在和一位朋友谈论这个问题 他不懂技术 但了解足够的技术来进行对话 他帮助我进一步缩小了这个问
  • 如何在 asp.net C# 4.0 中调用异步方法?

    我知道 net 4 5 中有await async 关键字 可以轻松调用异步方法 我目前正在研究如何在 C 4 0 中进行异步调用 我想要的一个例子是在数据网格正在进行数据绑定的情况下进行异步调用 如果您能为我提供一些链接 我将非常感激 看
  • 在 LINQ-SQL 中,将 DataContext 包装为一个 using 语句 - 优点 缺点

    有人可以从性能 内存使用 编码的简易性 正确的做法等因素方面阐述将 DataContext 包装在 using 语句中或不在 LINQ SQL 中之间的优缺点吗 Update 在一个特定的应用程序中 我发现 如果没有将 DataContex
  • 可选参数代码在 .NET 3.5 中编译。为什么?

    这段代码在 VS 2010 的框架 3 5 项目中编译正常 我三次检查过 public LoggingClient string uri net msmq localhost logging 为什么 我在 C 4 规范中没有看到任何内容 文
  • C# 数组如何存储在内存中

    我想我的主要问题是 只要我不重新初始化 新字节 作为参数传递的数组 这总是有效吗 static unsafe decimal GetDecimal byte ba decimal decimal PTR fixed byte byte PT
  • 在 C# 中替换部分文件名

    我有一个文件夹 pdf文件 在大多数文件的名称中 我想用另一个字符串替换特定字符串 这是我写的 private void btnGetFiles Click object sender EventArgs e string dir tbGe
  • C# ConcurrentDictionary 如何更新值属性?

    我存储这个类 public class Customer public string Firstname get set public string Lastname get set public string CustID get set
  • sandcastle 未解决的装配参考

    我正在尝试使用 sandcastle 帮助文件生成器生成文档 在沙堡中构建项目时 我收到以下错误 MRefBuilder error Unresolved assembly reference Microsoft Owin Microsof
  • LINQ to SQL 支持 POCO 吗?

    如果我想使用一个对象并利用 LINQ to SQL 我需要添加什么 如果有的话 到我的实体类中以确保我的应用程序可以与数据存储对话 此处不要讨论存储库模式 因为我只是在寻找业务对象内所需的内容 除了使用 LINQ to SQL 设计器并让它
  • 在调试或发布控制台应用程序中创建文件夹

    我在 vs2010 C 中有一个控制台应用程序 在项目中 我添加了一个文件夹 右键单击项目 添加 gt 文件夹 我希望在编译应用程序 调试或发布 时 然后该文件夹将在调试或发布目录中创建 如果不存在 那可能吗 控制台应用程序是一个守护程序
  • Android 手机作为 GSM 调制解调器在 PC 上发送/接收短信?

    是否可以将 Android 移动设备用作 PC 上的 GSM 调制解调器 我正在 net下开发应用程序来发送 接收短信等 现在我想通过 USB 将我的 Android 设备连接到我的 PC 并将其用作 GSM 调制解调器来与其通信 这里是参
  • 是否可以使用自定义类型属性的内容创建果园自动路线?

    我有一个 Orchard cms 模块 设置了一些附加的内容类型 并通过代码添加了一个 AutoRoute 组件 一切都很完美 但是我对默认的永久链接模式不满意 我想要做的是添加自定义模式并使用我的内容类型中的公共属性之一 就我而言 自定义

随机推荐