2017-01-03 82 views
1

我想使用DbSet.SqlQuery(字符串,对象[])来返回从DbSet中的实体派生的实体。用DbSet.SqlQuery检索派生实体

这应该根据文档(https://msdn.microsoft.com/en-us/library/system.data.entity.dbset.sqlquery(v=vs.113).aspx)是可能的:

创建一个原始的SQL查询,将在此集中返回的实体。默认情况下,返回的实体由上下文进行跟踪;这可以通过在返回的DbRawSqlQuery上调用AsNoTracking来改变。请注意,返回的实体始终是此集合的类型,永远不是派生类型。如果查询的表格可能包含其他实体类型的数据,则必须正确编写SQL查询以确保只返回正确类型的实体

这可能吗?我还没有找到办法做到这一点。

我试过使用Database.SqlQuery,但返回的实体没有被跟踪,并没有设置其导航属性(我需要)。

我的代码看起来是这样的:

public class Notification 
{ 
... 
} 

public class PageNotification : Notification 
{ 
... 
} 

public class SystemNotification : Notification 
{ 
... 
} 

public class MyContext : DbContext 
{ 
    public DbSet<Notification> Notifications { get; set; } 
} 

回答

1

我找到了一种方法来解决这个问题。我所要做的就是为派生类型添加一个额外的DbSet,并在该集上运行SqlQuery,如下所示:

public class MyContext : DbContext 
{ 
    DbSet<Notifikation> Notifications { get; set; } 
    DbSet<PageNotifikation> PageNotifications { get; set; } 
} 

MyContext.PageNotifications.SqlQuery(...)