从Entity Framework中的原始SQL查询返回多个相关实体类型

时间:2016-01-28 09:13:35

标签: c# entity-framework

在实体框架中使用原始SQL查询进行Noodling。考虑到这两个相关的EF课程,我是否正确?

public partial class Campaign
{
    public int CampaignId { get; set; }

    public virtual ICollection<Quote> Quotes { get; set; }
}

public partial class Quote
{
    public int QuoteId { get; set; }
    public int CampaignId { get; set; }

    public virtual Campaign Campaign { get; set; }
}

表由外键连接,对象由DB第一实体框架生成。

我无法发出可以获取所有广告系列及其相关报价的原始查询?我试过这个:

string sqlQuery = "select * from Campaign c join Quote q on q.CampaignId = c.CampaignId";
var meh = Entities.Database.SqlQuery<Campaign>(sqlQuery);

只会在没有引号的情况下带回广告系列。所以我猜它不可行,但我只是想检查一下我做错了什么?

我在文档中找不到明确的答案。而这个较旧的相关问题Fetching complex objects by raw SQL query in Entity Framework已经赞成但没有答案。

人们已经建议这是EF5 db.Database.SqlQuery mapping returned objects的副本,但有一个区别:我需要相关的嵌套实体而不是复杂类型。实际上,我想使用SqlQuery将相同的结果集返回到

Entities.Campaigns.Include(c => c.Quotes);

(如果你想知道为什么会这样,因为我有一套更为复杂的包,它会返回大量未保留的数据。没有人似乎能够解释为什么会这样,所以我正在投轮换替代方法)

1 个答案:

答案 0 :(得分:2)

我不认为您可以使用原始SQL查询执行此操作。您正在尝试实现嵌套的实现模型,EF提供了所有带有原始SQL查询的模型映射,这显然会提供与通过在数据库上运行sql查询获得的相同的平坦结果。您正在杀死实体框架关系建模概念,并希望获得EF提供的与其关系映射机制相同的结果