是否可以使用EF7

时间:2015-12-17 05:02:11

标签: c# entity-framework-core

我决定将我的一个项目移到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方法),但我更愿意避免使用它。

3 个答案:

答案 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>");
}