Wcf 用户代码未处理toList()System.InvalidCastException

Wcf 用户代码未处理toList()System.InvalidCastException,wcf,linq-to-sql,windows-services,.net,appdata,Wcf,Linq To Sql,Windows Services,.net,Appdata,我已经使用LINQtoSQL(使用以下代码)编写了一个WCF服务。在对同一数据库调用同一服务的wcf函数后,调用对象的.ToList()方法时,我面临无效强制转换异常 例外情况是: System.InvalidCastException was unhandled by user code Message=Specified cast is not valid. Source=System.Data StackTrace: at System.Data.SqlClien

我已经使用LINQtoSQL(使用以下代码)编写了一个WCF服务。在对同一数据库调用同一服务的wcf函数后,调用对象的.ToList()方法时,我面临无效强制转换异常

例外情况是:

System.InvalidCastException was unhandled by user code
  Message=Specified cast is not valid.
  Source=System.Data
  StackTrace:
       at System.Data.SqlClient.SqlBuffer.get_Int64()
       at System.Data.SqlClient.SqlDataReader.GetInt64(Int32 i)
       at Read_Command(ObjectMaterializer`1 )
       at System.Data.Linq.SqlClient.ObjectReaderCompiler.ObjectReader`2.MoveNext()
       at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
       at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
       at SystemsManager.ACS.GetCommands(Int64 agentId) in E:\Projects\SystemsManager\AgentControlService\ACS.svc.cs:line 167
       at SyncInvokeGetCommands(Object , Object[] , Object[] )
       at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs)
       at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc)
  InnerException: 
我遇到的具体问题是ToList()方法

以下是wcf服务接口中的命令模型

[DataContract]
    [Table(Name = "Command")]
    public class Command
    {
        [DataMember, Column(IsPrimaryKey = true, Name = "Command_Id", AutoSync = AutoSync.OnInsert, IsDbGenerated = true, DbType = "Bigint NOT null identity")]
        public long CommandId { get; set; }

        [DataMember, Column(Name = "Agent_Id")]
        public long AgentId { get; set; }

        [DataMember, Column(Name = "Name")]
        public string CommandName { get; set; }

        [DataMember, Column(Name = "Paramters")]
        public string CommandParamters { get; set; }

        [DataMember, Column(Name = "Is_Fetched")]
        public bool IsFectched { get; set; }

        [DataMember, Column(Name = "Status")]
        public long Status { get; set; }

        [DataMember, Column(Name = "Response")]
        public string Response { get; set; }

        [DataMember, Column(Name = "Created")]
        public DateTime Created { get; set; }

        [DataMember, Column(Name = "Last_Modified")]
        public DateTime LastModified { get; set; }

        [DataMember, Column(Name = "Is_Enabled")]
        public bool IsEnabled { get; set; }
    }
重要的是:我的数据库文件位于WCF服务的AppData文件夹中。在我的wcf服务中,我只使用了一个db对象的实例(参考上面的第一个代码块),我想知道这是否是问题的原因

此外,我还从桌面应用程序调用了两个类似的方法来实现这个非常相同的wcf服务,但我没有遇到任何这样的问题

请帮忙。如果需要更多详细信息,请说明。。唯一可以想到的是,数据库可能正在使用中,当服务与数据库建立另一个连接时,它会失败。并使用“快速观察”>“重新评估”按钮重试几次,在观察窗口中显示所需的值,而不会引发任何错误

请帮我做这件事。高度赞赏快速响应

谢谢


史蒂夫

别管男人了。我解决了

对于获得无效强制转换异常的任何其他人,以下是解决方案。 只有当实际的类模型与数据库不同时,才会发生错误

如果通过手工编码创建了类模型,则必须将表的每个列名与相应的类相匹配LINQ to sql在无法将数据库类型转换为.Net类型并引发无效强制转换异常时遇到错误。

因此,在大多数情况下,手动修复模型类中的错误或重新生成类都可以解决问题

var agent = client.GetAgentByIpAddress(myIPAddress);
                client.Close();
                if (agent != null)
                {
                    if (agent.AgentId != -1)
                    {
                        client = new ACSClient();
                        var command = client.GetCommands(agent.AgentId);
                        .....
[DataContract]
    [Table(Name = "Command")]
    public class Command
    {
        [DataMember, Column(IsPrimaryKey = true, Name = "Command_Id", AutoSync = AutoSync.OnInsert, IsDbGenerated = true, DbType = "Bigint NOT null identity")]
        public long CommandId { get; set; }

        [DataMember, Column(Name = "Agent_Id")]
        public long AgentId { get; set; }

        [DataMember, Column(Name = "Name")]
        public string CommandName { get; set; }

        [DataMember, Column(Name = "Paramters")]
        public string CommandParamters { get; set; }

        [DataMember, Column(Name = "Is_Fetched")]
        public bool IsFectched { get; set; }

        [DataMember, Column(Name = "Status")]
        public long Status { get; set; }

        [DataMember, Column(Name = "Response")]
        public string Response { get; set; }

        [DataMember, Column(Name = "Created")]
        public DateTime Created { get; set; }

        [DataMember, Column(Name = "Last_Modified")]
        public DateTime LastModified { get; set; }

        [DataMember, Column(Name = "Is_Enabled")]
        public bool IsEnabled { get; set; }
    }