我在 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/