asp.net-mvc - Linq to SQL 替换相关实体

标签 asp.net-mvc linq-to-sql

我在 Linq to SQL 模型中有一个 Client 实体和一个 PostCode 实体。数据库中的Clients表包含client_postcode列,它是PostCode表中postalcode列的FK列,它是PostCode的varchar列主键表。

更新客户端时,在我的代码中我这样做

        // postcode
        updating.PostCode = (from p in ctx.PostCodes
                             where p.postalcode.Equals(client.PostCode.postalcode)
                             select p).First();

其中 client 对象是从 ASP.NET MVC View 表单提供的。此代码似乎可以很好地设置与 PostCode 相关的实体。但是在调用 SubmitChanges() 时,我收到以下异常:

类型为“PostCode”的对象的成员“postalcode”的值已更改。不能更改定义对象标识的成员。考虑添加具有新身份的新对象并删除现有对象。

所以我目前无法更改相关实体。这在 Linq to Sql 中是如何完成的?

更新:

在进一步审查和故障排除后,我发现问题出在 ASP.NET MVC UpdateModel() 调用中。如果我调用 UpdateModel() 以使用编辑后的数据更新现有实体,则 PostCode 的 FK 分配有问题。如果我不调用 UpdateModel 并手动执行它,它就可以工作。 有什么想法在 UpdateModel() 中出了什么问题,它无法正确设置与外键实体的关系吗?

我正在更新这个问题并开始悬赏。问题被简化了。在 ASP.NET MVC 编辑 View 中更新项目(相关实体作为 FK)时,如何成功使用 L2S 和 UpdateModel() 工作?

最佳答案

在我看来,您在 http post 请求中收到了 PostCode.postalcode

根据模型绑定(bind)的工作原理,UpdateModel 调用更新您传递给它的模型的 .PostCode.postalcode

使用 this overload包括或排除特定属性

关于asp.net-mvc - Linq to SQL 替换相关实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3611716/

相关文章:

jquery - 处理带有多条记录的 asp.net core 表单提交中的多选列表框值

asp.net-mvc - 在 MVC3 中使用带有自定义成员资格提供程序的 microsoft-mvc-helpers 包时出现问题

c# - 从数据库表中删除行

c# - 如何在 Visual Studio 中查找 MVC Controller 方法的引用

javascript - 将 AngularJS 模型发布到 ASP.NET MVC Controller 中的复杂模型

c# - 从表中获取最大值,除非为空

asp.net-mvc - MVC-mini-profiler 和 Linq-2-SQL

c# - 如果无法安全地用于生产并且无法描述索引之类的东西,为什么我应该首先使用 Entity Framework 代码

entity-framework - 如何联接多个表?

wpf - 如何将 "IsDirty"属性添加到 LINQ to SQL 实体?