我也有类似的情况曾经,我的问题是与存储过程中的数据库B(我必须通过链接服务器访问该对象在我的中央数据库,姑且称之为数据库答:这是不可能的地图数据库B由于少数公司政策),当使用数据库优先方法时,EF 6不允许您将此存储过程映射到您的EDMX文件中,所以我想出了一种欺骗实体框架的方法。
这很简单,我只是在数据库A增加了一个SQL同义词,这个对象指向视图/存储过程/表在数据库B(见附图)![SQL Synonym Creation](https://i.stack.imgur.com/mVI5Y.png)
当然,我创建的代名词在我的情况在数据库B中的存储过程,然后在方法执行我喜欢这个存储过程:
SqlParameter paramNumber1 = new SqlParameter("@firstParameter", someVariable);
//We need to create a class for the Synonym result, which origin is: [Server].[Database].[dbo].[RemoteStoredProcedure]
var result = ctx.Database.SqlQuery<classForTheSPResult>("RemoteStoredProcedure @firstParameter", paramNumber1).ToList();
如果采取这种方法,你可以从你的代名词查看执行原始SQL查询。 For further information, check some the MSDN site,查询将如下所示:
using (var context = new BloggingContext())
{
var blogs = context.Blogs.SqlQuery("SELECT * FROM dbo.Blogs").ToList();
}
我希望我的意见对我有帮助。
你能否更清楚地陈述问题。视图中生成的对象是否没有PK属性?链接的服务器与此有关吗?我相信对于缺少PK问题的观点有一些解决方法。 –
嗨Nick.McDermaid,是的,对象没有PK,没有导航属性。你能带我去一个导游吗? – khoailang
这里是如何欺骗EF以为你的观点PK了一个解释:http://stackoverflow.com/questions/1013333/entity-framework-and-sql-server-view。接受的答案是一个解决方法。再往下看,它解释了如何在不破坏视图的情况下实现它。 –