我决定将我的一个项目移到Entity Framework 7(rc1-final)。我的目标是SQL Server,并且还安装了EntityFramework.MicrosoftSqlServer
包。
我只有一个问题:似乎我无法执行自定义SQL查询以从DB中获取某些对象。
DatabaseFacade
对象(可通过DbContext.Database
属性访问)提供扩展方法ExecuteSqlCommand
(不返回任何内容),但它不提供允许的SqlQuery<T>
方法获取对象。这两种方法都可以在旧的EF 6中使用,但是新的EF 7只声明了第一种方法。
那么,SqlQuery<T>
方法是否仍在此处(但已移动/重命名),或者它是否已从新的EF实施中完全删除?
当然,绝对有可能以冗长的方式解决它(使用SqlCommand
及其ExecuteReader
方法),但我更愿意避免使用它。
答案 0 :(得分:6)
EntityFramework.Relational
公开了以下扩展方法;
public static IQueryable<TEntity> FromSql<TEntity>(
[NotNull] this IQueryable<TEntity> source,
[NotNull] [NotParameterized] string sql,
[NotNull] params object[] parameters)
where TEntity : class
所以你可以这样做;
myDatabaseContext.Customers.FromSql("SELECT * FROM Customers WHERE Name='p0'", "timothy");
答案 1 :(得分:1)
要在EF7中执行自定义SQL查询,您可以创建一个“假”表,其结构与SQL查询的结构类似。
示例: 您的查询是:“从A,B中选择a.A,b.B,其中a.b_id = b.id”。假表将包含2列,如A,B。 在你的程序中,你可以这样做:
java.lang.OutOfMemoryError: Java heap space
答案 2 :(得分:0)
看起来您可以在传递给Up和Down方法的migrationBuilder对象上使用Sql方法。至少在rc2。
protected override void Up(MigrationBuilder migrationBuilder)
{
...
migrationBuilder.Sql("<Sql here>");
}