C# DbContext可以’;t在SQL中的同义词上插入记录
当我们从DbContext调用SaveChanges()来插入记录时,它将检查scope_identity以获得受影响的行并返回它,一切正常,但如果我们使用链接服务器和同义词,因为scope_identiy是本地的,scope_identiy将返回null,因为它是远程的,并且它会说: System.Data.Entity.Infrastructure.DbUpdateConcurrencyException(发生) Message=受影响的存储更新、插入或删除语句 意外的行数(0)。实体可能已被修改或删除 已删除,因为已加载实体。刷新ObjectStateManager 条目 因为DbContext希望在插入后执行如下代码:C# DbContext可以’;t在SQL中的同义词上插入记录,c#,sql-server,entity-framework,linked-server,synonym,C#,Sql Server,Entity Framework,Linked Server,Synonym,当我们从DbContext调用SaveChanges()来插入记录时,它将检查scope_identity以获得受影响的行并返回它,一切正常,但如果我们使用链接服务器和同义词,因为scope_identiy是本地的,scope_identiy将返回null,因为它是远程的,并且它会说: System.Data.Entity.Infrastructure.DbUpdateConcurrencyException(发生) Message=受影响的存储更新、插入或删除语句 意外的行数(0)。实体可能已
SELECT [Id]
FROM [dbo].[PortalUsers]
WHERE @@ROWCOUNT > 0 AND [Id] = scope_identity()
和scope_identity返回null,将抛出异常
我们是否可以告诉实体不要检查受影响的行或类似的内容来解决问题??谢谢,但您发送的链接不是我的链接answer@EmranSadeghi您可以为CRUD创建3个存储过程,并使用存储过程映射将这些过程映射到实体的CRUD操作。在“插入”存储过程中,您可以手动从远程服务器检索标识(这需要一点努力,因为您不能使用这两个输出,但可以在远程服务器上调用一个存储过程来完成此工作!)@Blim否我不想创建存储过程,我想使用实体与喜欢的服务器作为正常的连接字符串!