C# 更新导航属性未设置Forgein键
我有一些在EntityFramework4.0上运行的旧代码。我将模型更新为最新和最好的版本(v6),在这样做的过程中,我不得不对创建/注入的方式做一些小的更改。我从遗留C# 更新导航属性未设置Forgein键,c#,entity-framework,entity-framework-6,C#,Entity Framework,Entity Framework 6,我有一些在EntityFramework4.0上运行的旧代码。我将模型更新为最新和最好的版本(v6),在这样做的过程中,我不得不对创建/注入的方式做一些小的更改。我从遗留ObjectContext模型转到了T4生成模型。 我已经运行了一些测试,并查看了结果,大多数事情看起来都很棒。但我确实有一两个测试,我更新或添加对实体对象的引用,然后验证外键是否已正确更新。。。长话短说,它不是 例如:我获取一个地址,但它缺少其所有者,因此我获取一个ApplicationUser对象,并将其设置在Address
ObjectContext
模型转到了T4生成模型。
我已经运行了一些测试,并查看了结果,大多数事情看起来都很棒。但我确实有一两个测试,我更新或添加对实体对象的引用,然后验证外键是否已正确更新。。。长话短说,它不是
例如:我获取一个地址,但它缺少其所有者,因此我获取一个ApplicationUser
对象,并将其设置在Address.User
属性上。从历史上看,这会将地址.User\u ID
更新为与应用程序用户
匹配的正确值,但它不再这样做
你知道为什么吗?在新的EF世界里,有没有我错过的设置
Address.User = ApplicationUser;
Address.User_ID (is not updated)
更新:如果我允许对象被持久化,它将以正确的FK值正确存储在数据库中。为什么不设置
导航属性的FK而不是设置实际对象呢
而不是这样做,因为您只是将其持久化到数据库中,而不会在内存中执行任何操作
Address.User = ApplicationUser;
Address.User_ID (is not updated)
对此
Address.User_ID ApplicationUser.Id;
当您将地址
持久化回数据库时,地址
的UserId列是否具有applicationserid
值?这是一个好问题,它未通过我的验证,因此无法进入数据库。我可以尝试删除验证,看看它是否仍然正常工作。我将发布一个更新。@ll如果我绕过验证,它的行为是正确的,它就不会实时更新FK。我可以这样做,但我必须重写应用程序,这是我现在不愿意做的。这是因为您将ObjectContext
更改为T4模板
。是ObjectContext
为您设置FK。我想你必须更新你的测试。