C# 调用模型字段的SELECT时,实体框架的原始SQL查询不起作用

C# 调用模型字段的SELECT时,实体框架的原始SQL查询不起作用,c#,entity-framework,C#,Entity Framework,我无法运行查询,因为每当我尝试使用SELECT构造时都会出现一个奇怪的错误 错误是: 数据读取器与指定的“BDtest.Ticket”不兼容。“Id”类型的成员在数据读取器中没有同名的对应列 我的模型是: public class Departure { public int Id { get; set; } public string From { get; set; } public string To { get; set; } public bool En

我无法运行查询,因为每当我尝试使用SELECT构造时都会出现一个奇怪的错误

错误是:

数据读取器与指定的“BDtest.Ticket”不兼容。“Id”类型的成员在数据读取器中没有同名的对应列

我的模型是:

public class Departure
{
    public int Id { get; set; }
    public string From { get; set; }
    public string To { get; set; }
    public bool Ended { get; set; }
    public int MaximumTickets { get; set; }

    public List<Ticket> Tickets { get; set; }
}

public class Ticket
{
    public int Id { get; set; }
    public string Passenger { get; set; }
    public double Price { get; set; }
    public string Type { get; set; }

    public int DepartureId { get; set; }
    public Departure Departure { get; set; }
}
试一试


不起作用的查询只是选择[Passenger]列,我认为它至少需要结果集中包含的主键列。@Crowcoder,我试图使用这个:var cross=ctx.Tickets.SqlQuerySELECT Id FROM dbo.Tickets,其中Id=5;但错误已更改:数据读取器与指定的BDtest.Ticket不兼容。类型为Passenger的成员在数据读取器中没有相同名称的匹配列。由于某些原因,我的模型中的字段在错误位置发生了更改。您为什么不愿意只查询与类票证中的属性匹配的所有列?实际上,我不得不使用一个更难的查询来引用相同的错误。这是一个查询:var cross=ctx.Tickets.SqlQuerySELECT Id,Passenger,Price,[siting],[crimbent],[staining]来自dbo。输入[siting],[crimbent],[staining]作为test\u PIVOT.ToList的Tickets枢轴和价格;
var cross = ctx.Database.SqlQuery<Ticket>("SELECT Passenger FROM Tickets WHERE Id=5").ToList();

foreach (var item in cross)
{
    richTextBox1.Text = item.ToString();
}
var cross = ctx.Database.SqlQuery<Ticket>("SELECT * FROM Tickets WHERE Id=5").ToList();
var cross = ctx.Database.SqlQuery("SELECT Passenger FROM dbo.Tickets WHERE Id=5").ToList();
//Get Passenger of string type
string studentName = ctx.Database.SqlQuery<string>("Select Passenger from Tickets where Id=1").FirstOrDefault();

//or
string studentName = ctx.Database.SqlQuery<string>("Select Passenger from Tickets where Id=@id", new SqlParameter("@id", 1)).FirstOrDefault();
var ticketList = ctx.Tickets
                        .SqlQuery("Select * from Tickets where Id=1")
                        .ToList<Ticket>();