C# 通过设置Id更新EF 4.0中的外键关系时出现问题

C# 通过设置Id更新EF 4.0中的外键关系时出现问题,c#,sql-server,entity-framework,entity-framework-4,C#,Sql Server,Entity Framework,Entity Framework 4,我正在尝试通过外键更新EntityFramework 4(使用microsoft sql server数据库)中的外键关系 我使用.Single()加载对象,然后尝试将其设置为对象.ExampleId(示例表是与C#中的枚举相对应的引用表)。然后我在上下文中调用SaveChanges() 这样做可以在本地工作,但在生产服务器上它会失败并出现挂起。通过使用调试语句,我将挂起的范围缩小到实际设置Id的行 我可以通过加载整个示例对象并执行object.Example=loadedeexample而不是

我正在尝试通过外键更新EntityFramework 4(使用microsoft sql server数据库)中的外键关系

我使用
.Single()
加载对象,然后尝试将其设置为
对象.ExampleId
(示例表是与C#中的枚举相对应的引用表)。然后我在上下文中调用
SaveChanges()

这样做可以在本地工作,但在生产服务器上它会失败并出现挂起。通过使用调试语句,我将挂起的范围缩小到实际设置Id的行

我可以通过加载整个示例对象并执行
object.Example=loadedeexample
而不是
object.ExampleId=ExampleId
来解决问题


我的问题是为什么会这样?在其他地方,我只能通过设置Id来更新关系。这是一种不好的做法吗?

问题是设置FK Id导致实体框架加载具有该Id的外键关系的所有成员。在我们的暂存服务器和实时服务器上,该关系中的项目数量很多更高

这导致请求超时并失败


解决方案就在这里:

不,这不是一个坏习惯-一旦FK被暴露,你应该使用它们来设置关系。一定还有别的事。在您的开发机器中,使用SQL profiler并检查在分配Id时是否没有延迟加载。但是,您找到解决方案了吗?