C# Microsoft实体框架中使用的原始SQL查询是否返回对象?

C# Microsoft实体框架中使用的原始SQL查询是否返回对象?,c#,entity-framework,C#,Entity Framework,我个人喜欢SQL,但我意识到我可能需要遵循EF设计。有时和其他团队成员一起使用SQL。当进行原始SQL查询时,它是否返回C#代码的对象/属性?如果映射了五个表,并执行了原始查询,是否返回了相应的属性?答案是肯定的。您需要为原始SQL查询的结果定义实体类,请记住使属性的名称与查询中返回的列的名称完全相同 context.Database.SqlQuery<YourEntity>("your query").ToList(); context.Database.SqlQuery(“您的

我个人喜欢SQL,但我意识到我可能需要遵循EF设计。有时和其他团队成员一起使用SQL。当进行原始SQL查询时,它是否返回C#代码的对象/属性?如果映射了五个表,并执行了原始查询,是否返回了相应的属性?

答案是肯定的。您需要为原始SQL查询的结果定义实体类,请记住使属性的名称与查询中返回的列的名称完全相同

context.Database.SqlQuery<YourEntity>("your query").ToList();
context.Database.SqlQuery(“您的查询”).ToList();

答案是肯定的。您需要为原始SQL查询的结果定义实体类,请记住使属性的名称与查询中返回的列的名称完全相同

context.Database.SqlQuery<YourEntity>("your query").ToList();
context.Database.SqlQuery(“您的查询”).ToList();

使用EF,您必须为原始查询创建和维护POCO,并且您的查询文本可能会在双引号中的某个位置出现。为什么不抓呢?sql将位于.sql文件中,包装器代码(包括POCO)将为您生成和管理。还有许多其他的优势

你不必只使用一种方法。很多人在需要/想要“恢复”到SQL时使用EF、Dapper或类似的东西。QueryFirst不是ORM,也不能替换EF。显然,如果您让EF管理您的模式,(代码优先,模型优先),那么非EF查询就有可能被EF模式的更改打垮。但至少使用QueryFirst,您可以“重新编译”您的查询,以确保它们正常工作,并且在EF更改您的模式后仍然返回您需要的内容


免责声明:我写了QueryFirst。

使用EF,您必须为原始查询创建并维护POCO,并且您的查询文本可能会在双引号中的某个位置出现。为什么不抓呢?sql将位于.sql文件中,包装器代码(包括POCO)将为您生成和管理。还有许多其他的优势

你不必只使用一种方法。很多人在需要/想要“恢复”到SQL时使用EF、Dapper或类似的东西。QueryFirst不是ORM,也不能替换EF。显然,如果您让EF管理您的模式,(代码优先,模型优先),那么非EF查询就有可能被EF模式的更改打垮。但至少使用QueryFirst,您可以“重新编译”您的查询,以确保它们正常工作,并且在EF更改您的模式后仍然返回您需要的内容


免责声明:我写了QueryFirst。

你是说我必须创建一个类,该类将包含该查询的所有列?换句话说,我必须创建一个类,在这个类中有五个表的列?@johnny,是的,你需要这样做。我不知道更优雅的方法。但是如果我不使用原始SQL,我可以从已经映射的单个表而不是特殊类中获取数据吗?@johnny,我不知道你的意思。如果您不使用原始sql查询,当然您仍然可以使用Linq to sql来处理映射表。您是说我必须创建一个包含该查询所有列的类吗?换句话说,我必须创建一个类,在这个类中有五个表的列?@johnny,是的,你需要这样做。我不知道更优雅的方法。但是如果我不使用原始SQL,我可以从已经映射的单个表而不是特殊类中获取数据吗?@johnny,我不知道你的意思。如果您不使用原始sql查询,当然您仍然可以使用Linq to sql来处理映射表。我不知道,我只希望事情成为对象,而不是解析字符串和不知道数据类型。因为我使用的是VisualStudio,所以它似乎会提高工作效率,但是ORM的开销(我不喜欢ORM)似乎有很多麻烦,没有很多回报。QueryFirst。别犹豫。你刚才说了所有的理由。这不是一个ORM,也没有开销。我不知道除了我希望事物成为对象,而不是我解析字符串和不知道数据类型。因为我使用的是VisualStudio,所以它似乎会提高工作效率,但是ORM的开销(我不喜欢ORM)似乎有很多麻烦,没有很多回报。QueryFirst。别犹豫。你刚才说了所有的理由。这不是ORM,也没有开销。