我有一个存储过程,它返回两个表之间的左连接,如:
select * from table a
left join table2 b on a.id = b.a_id
我已将我的存储过程添加到我的edmx文件中,但是当我想获得结果时,该过程不会出现在我的上下文中,例如context.my_stored_procedure
。谁知道为什么?
PS:在存储过程中实际上有12个已加入的表
答案 0 :(得分:0)
您需要使用 EDM模型浏览器创建功能导入:
这里有一些链接可以指导您使用它来完成它:
http://msdn.microsoft.com/en-us/library/vstudio/bb896231%28v=vs.100%29.aspx http://www.entityframeworktutorial.net/data-read-using-stored-procedure.aspx http://programmaticponderings.wordpress.com/2012/11/22/first-impressions-of-database-first-development-with-entity-framework-5-in-visual-studio-2012/
通过这种方式, EDM 将在存储过程的 dbcontext 中创建方法,并且可以通过在方法中传递参数来调用方法时调用它们。
答案 1 :(得分:0)
您不能在LINQ to Entity中使用类似的存储过程。但是,您可以在数据库中创建VIEW
而不是它。之后你可以这样称呼这个观点:
context.my_view
或者您可以使用查询或方法语法在LINQ中连接这些表。例如:
var query = from t1 in entity.TABLE1
join t2 in entity.TABLE2 on t1.COLUMN3 equals t2.COLUMN5
join t4 in entity.TABLE3 on t1.COLUMN2 equals t4.COLUMN2 into leftouter
join t5 in entity.TABLE4 on t4.COLUMN1 equals t5.COLUMN7
from c in leftouter.DefaultIfEmpty()
select new MyClass()
{
t1.COLUMN1
};