Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 更新导航属性未设置Forgein键_C#_Entity Framework_Entity Framework 6 - Fatal编程技术网

C# 更新导航属性未设置Forgein键

C# 更新导航属性未设置Forgein键,c#,entity-framework,entity-framework-6,C#,Entity Framework,Entity Framework 6,我有一些在EntityFramework4.0上运行的旧代码。我将模型更新为最新和最好的版本(v6),在这样做的过程中,我不得不对创建/注入的方式做一些小的更改。我从遗留ObjectContext模型转到了T4生成模型。 我已经运行了一些测试,并查看了结果,大多数事情看起来都很棒。但我确实有一两个测试,我更新或添加对实体对象的引用,然后验证外键是否已正确更新。。。长话短说,它不是 例如:我获取一个地址,但它缺少其所有者,因此我获取一个ApplicationUser对象,并将其设置在Address

我有一些在EntityFramework4.0上运行的旧代码。我将模型更新为最新和最好的版本(v6),在这样做的过程中,我不得不对创建/注入的方式做一些小的更改。我从遗留
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。我想你必须更新你的测试。