Linq - 接收错误"Unable to cast object of type 'System.String' to type 'System.Byte[]'."



这是我第一次尝试使用LINQ。我有一个数据库表,它由两个字符串列、一个位列和一个定义为int的id列组成。该表包含配置数据,因此只有一行。

数据库定义。。。

CREATE TABLE [dbo].[Configuration](
[Id] [int] IDENTITY(1,1) NOT NULL,
[LegalRepository] [nvarchar](100) NOT NULL,
[TitleRepository] [nvarchar](100) NOT NULL,
[AlwaysOpenOnDesktop] [bit] NOT NULL
) ON [PRIMARY]

查询如下所示。。。

Configuration config = fileSearchDB.Configurations.Single(c => c.Id == configId);

配置类是…

[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.Configuration")]
public partial class Configuration
{
    private int _Id;
    private System.Data.Linq.Binary _LegalRepository;
    private System.Data.Linq.Binary _TitleRepository;
    private bool _AlwaysOpenOnDesktop;
    public Configuration()
    {
    }
    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Id", AutoSync=AutoSync.Always, DbType="Int NOT NULL IDENTITY", IsDbGenerated=true)]
    public int Id
    {
        get
        {
            return this._Id;
        }
        set
        {
            if ((this._Id != value))
            {
                this._Id = value;
            }
        }
    }
    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_LegalRepository", DbType="VarBinary(MAX) NOT NULL", CanBeNull=false, UpdateCheck=UpdateCheck.Never)]
    public System.Data.Linq.Binary LegalRepository
    {
        get
        {
            return this._LegalRepository;
        }
        set
        {
            if ((this._LegalRepository != value))
            {
                this._LegalRepository = value;
            }
        }
    }
    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_TitleRepository", DbType="VarBinary(MAX) NOT NULL", CanBeNull=false, UpdateCheck=UpdateCheck.Never)]
    public System.Data.Linq.Binary TitleRepository
    {
        get
        {
            return this._TitleRepository;
        }
        set
        {
            if ((this._TitleRepository != value))
            {
                this._TitleRepository = value;
            }
        }
    }
    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_AlwaysOpenOnDesktop", DbType="Bit NOT NULL")]
    public bool AlwaysOpenOnDesktop
    {
        get
        {
            return this._AlwaysOpenOnDesktop;
        }
        set
        {
            if ((this._AlwaysOpenOnDesktop != value))
            {
                this._AlwaysOpenOnDesktop = value;
            }
        }
    }
}

int字段configId=1,这是表中唯一一行的id。

为什么我收到这个错误?

无法将"System.String"类型的对象强制转换为"System.Byte[]"类型

谢谢,Gary

更新:我添加了Configuration类的定义,configId变量是一个int

查看Configuration类的定义后,我发现存储库字段被定义为二进制字段。它们应该是字符串。我删除了配置表并重新读取了它,列现在被定义为字符串。

Configuration的定义将LegalRepository和TitleRepository声明为不可变的二进制字段,而在数据库中,它们是简单的字符串。字段的DB声明必须更改为varbinary,或者对象字段应成为普通的string属性。

相关内容

最新更新