【发布时间】:2019-09-17 23:12:51
【问题描述】:
我有一个非常大的现有数据库,其中包含许多视图和表。我需要结合一些视图和表格的结果。我希望这些组合数据在我的 DbContext 中可用,但没有可用于将实体映射到我想要的 SQL 结果的单个对应视图或表。
为此,我在我的上下文中设置了一个 DbQuery,并使用 OnModelCreating 方法设置查询结果,示例如下。
这里是实体对象模型。在此示例中,Author 和 Book 是表,AuthorBookCount 是自定义 SQL 查询的对象模型,没有要映射到的相应视图或表。
public class Author
{
[Column("ID")]
public int Id { get; set; }
[Column("FIRST_NAME")]
public string FirstName { get; set; }
[Column("LAST_NAME")]
public string LastName { get; set; }
}
public class Book
{
[Column("ID")]
public int Id { get; set; }
[Column("AUTHOR_ID")]
public int AuthorId { get; set; }
[Column("TITLE")]
public string Title { get; set; }
}
public class AuthorBookCount
{
[Column("AUTHOR_FULL_NAME")]
public string AuthorFullName { get; set; }
[Column("BOOK_COUNT")]
public long BookCount { get; set; }
}
然后我像这样设置DbContext:
public class MyDbContext : DbContext
{
public DbSet<Author> Authors { get; set; }
public DbSet<Book> Books { get; set; }
public DbQuery<AuthorBookCount> AuthorBookCounts { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
//Set up cnxn string
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Query<AuthorBookCount>().ToQuery(() =>
AuthorBookCounts.FromSql("SELECT DISTINCT(Authors.FIRST_NAME + ' ' + Authors.LAST_NAME) AS AUTHOR_FULL_NAME, COUNT(Books.Id) FROM Authors JOIN Books ON Books.AUTHOR_ID = Authors.ID GROUP BY (Authors.FIRST_NAME + ' ' + Authors.LAST_NAME)");
}
}
现在,当我尝试使用我的 AuthorBookCounts 属性时,我收到一个 SystemNotSupported 异常,并显示一条消息,指出当前不支持 FromSql。
我将我的FromQuery SQL 调用更改为 LINQ 查询,它可以正常工作。这个解决方案的问题是我的 SQL 调用非常复杂,不断将我的 SQL 转换为 LINQ 语句是一个巨大的痛苦。
任何关于正在发生的事情或我做错了什么的解释将不胜感激。
【问题讨论】: