为什么我得到"指定演员表无效。"?

时间:2016-02-04 06:49:28

标签: c# asp.net sql-server asp.net-mvc tsql

它指向

的行Id = dataReader.GetGuid(0),
    while (dataReader.Read())
    {
        Partners.Add(new Partner {
            Id = dataReader.GetGuid(0),
            Name = dataReader.GetString(1),
            Email = dataReader.GetString(2),
            Finished = dataReader.GetInt32(3) == 1
        });
    }
}

我已经确认 IddataReader.GetGuid(0)都属于Guid 类型,如果您能相信的话。

Id属于Guid类型,因为它是

中的字段
public class Partner
{
    public Guid Id { get; set; }
    public string Name { get; set; }
    public string Email { get; set; }
    public bool Finished { get; set; }
}

dataReader.GetGuid(0)的类型为Guid,因为当我这样做时

public class Partner
{
    //public Guid Id { get; set; }
    public string Id { get; set; }
    public string Name { get; set; }
    public string Email { get; set; }
    public bool Finished { get; set; }
}

Id = dataReader.GetString(0)

我收到错误

  

无法转换类型为&System; Guid'的对象。输入' System.String'

毫无意义!

编辑:当我隐式输入时,它看起来我正在获取值:

enter image description here

3 个答案:

答案 0 :(得分:0)

dataReader.GetString(0)会返回String,并且不会将Guid隐含地投放到String,因此会InvalidCastException

尝试:

Id = dataReader.GetGuid(0).ToString()

另外,尝试使用String索引器获取值,而不是integer索引器:

Id = dataReader.GetGuid("Id"),
Name = dataReader.GetString("Name"),
Email = dataReader.GetString("Email"),
Finished = dataReader.GetInt32("Finished") == 1

否则,在结果中添加列会破坏您的代码。

更好的是,尝试使用EntityFramework为您完成所有映射。

答案 1 :(得分:0)

这是你的答案。如果要在合作伙伴类中使用Guid类型,当您从SQL Server读取数据时,将从服务器返回的字符串数据类型转换为Guid类型,如下所示

while (dataReader.Read())
{
    Partners.Add(new Partner {
    Id = Guid.Parse(dataReader.GetString(0)),
    Name = dataReader.GetString(1),
    Email = dataReader.GetString(2),
    Finished = dataReader.GetInt32(3) == 1 });
}

但您的合作伙伴班级将具有Id类型Guid,如下所示

public class Partner
{
    public Guid Id { get; set; }
    public string Name { get; set; }
    public string Email { get; set; }
    public bool Finished { get; set; }
}

答案 2 :(得分:0)

尝试将操作参数强制转换为Guid时遇到了这个问题。

Guid.Parse(context.ActionArguments["someArgument"])

这里的问题是ActionArguments是一个包含IDictionary<string, object>之类对象的IDictionary

尝试将object强制转换为Guid时,会出现错误。解决方案是将其转换为字符串,然后进行转换。

Guid.Parse(context.ActionArguments["someArgument"].ToString());