使用DbSet.SqlQuery检索派生实体

时间:2017-01-03 14:54:17

标签: c# entity-framework

我试图使用DbSet.SqlQuery(string,object [])来返回从DbSet中的实体派生的实体。

根据文档(https://msdn.microsoft.com/en-us/library/system.data.entity.dbset.sqlquery(v=vs.113).aspx):

,这应该是可能的
  

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

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

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

我的代码看起来像这样:

var sel = '#RadMenu1 > ul > li:nth-child(3)'; // top-level menu       

var elem = element(by.css(sel));

elem.click().then(function () {    

    var elem2 = element(by.css(sel));
    browser.sleep(2000);        

    // OPENS SUBMENUS
    browser.actions()
	.mouseMove(elem2, { x: 25, y: 50 }) // an offset relative to the top-left corner of elem2
	.click()
	.perform()
	    .then(function () {
		browser.sleep(1000);
		browser.actions()
		    .mouseMove({ x: 150, y: 20 })   // opens next menu option
		    .click()
		    .perform()
			.then(function () {
			    var elem = element(by.cssContainingText('.rmText', 'Menu Item To Click'));   		
            		    elem.click();  
			});
	    });
    

});
}

1 个答案:

答案 0 :(得分:1)

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

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

MyContext.PageNotifications.SqlQuery(...)