Entity framework EF 6.1.3中带“;“链接服务器”;
我正在使用SQL Server 2012和EF 6.1.3 我有一个中央数据库a和另一个链接到数据库a的数据库B。这两个数据库用于两个不同的应用程序 在数据库B中,我有一些视图,这些视图与中央数据库A中的一些表完全相同 我期望的是,当我在数据库B的视图中插入/更新/删除记录时,这些记录将在中央数据库A中插入/更新/删除 对于使用数据库B的应用程序(这是链接服务器,而不是中央数据库),我使用EF生成视图(使用电动工具)。生成的代码看起来不错,但是,当然,生成的实体没有主键属性,也没有导航属性 您能提供解决方案吗?EF(电动工具)使用系统表检索架构,如果在数据库a上运行电动工具,则无法检索有关链接表的导航信息。最好的方法可能是从数据库B开始为数据库B生成类(删除从数据库A开始生成的相同类),然后混合这两个数据库。Entity framework EF 6.1.3中带“;“链接服务器”;,entity-framework,linked-server,Entity Framework,Linked Server,我正在使用SQL Server 2012和EF 6.1.3 我有一个中央数据库a和另一个链接到数据库a的数据库B。这两个数据库用于两个不同的应用程序 在数据库B中,我有一些视图,这些视图与中央数据库A中的一些表完全相同 我期望的是,当我在数据库B的视图中插入/更新/删除记录时,这些记录将在中央数据库A中插入/更新/删除 对于使用数据库B的应用程序(这是链接服务器,而不是中央数据库),我使用EF生成视图(使用电动工具)。生成的代码看起来不错,但是,当然,生成的实体没有主键属性,也没有导航属性 您能
最后,您混合了这两个模型(将导航属性从A模型添加到B模型,反之亦然)。我曾经遇到过类似的情况,我的问题是数据库B中的存储过程(我通过我的中央数据库中的链接服务器访问了这个对象,我们称之为数据库A。由于一些公司的政策,无法映射数据库B),EF 6不允许您在使用数据库优先方法时在EDMX文件中映射此存储过程,因此我发现了一种欺骗实体框架的方法 很简单,我刚刚在数据库A中添加了一个SQL同义词,这个对象指向数据库B中的视图/存储过程/表(见附图) 当然,在本例中,我在数据库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();
using (var context = new BloggingContext())
{
var blogs = context.Blogs.SqlQuery("SELECT * FROM dbo.Blogs").ToList();
}
我希望我的评论对你有所帮助。你能更清楚地说明这个问题吗。问题是从视图生成的对象没有PK属性吗?链接服务器与此有关吗?我相信有一些解决方法可以解决视图缺少PK的问题。嗨,Nick.McDermaid,是的,对象没有PK,没有导航道具erties。你能带我去看一个指南吗?这里有一个解释,说明如何欺骗EF,使其认为你的视图有PK:。公认的答案是一个解决方法。进一步解释,它说明了如何在不破坏视图的情况下实现它。谢谢大家,我意识到我不需要使用“链接服务器”。我正在考虑使用“复制”相反,您好,bubi,我没有在中央数据库A中运行EF Power Tools。我在数据库B中运行该工具。生成的类没有导航属性。您的意思是我将手动添加导航属性?导航属性是自动生成的。DBMS是B吗?您使用的是EDMGEN吗?不,我使用的是EF Power Tools,n不会为视图对象生成导航属性。SQL Server 2012适用于所有A和B。谢谢大家,我意识到我不需要使用“链接服务器”。我正在考虑改用“复制”。