代码之家  ›  专栏  ›  技术社区  ›  mare

Linq to SQL替换相关实体

  •  3
  • mare  · 技术社区  · 15 年前

    我有一个 Client 实体与 PostCode LINQ to SQL模型中的实体。这个 Clients 数据库中的表包含 client_postcode 列,它是fk列到postalcode列 邮政编码 表,它是Postcode表的varchar列主键。

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

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

    在哪里? client 对象是从ASP.NET MVC视图窗体提供的。此代码似乎可以设置邮政编码相关的实体。但在调用SubmitChanges()时,我收到以下异常:

    “Postcode”类型的对象的成员“PostalCode”的值已更改。无法更改定义对象标识的成员。考虑添加具有新标识的新对象,并删除现有对象。

    因此,我目前无法更改相关实体。如何在Linq to SQL中完成这项工作?

    更新:

    在进一步检查和排除故障后,我发现问题出在ASP.NET MVC UpdateModel()调用中。如果我调用updateModel()用编辑过的数据更新现有实体,则邮政编码的fk赋值有问题。如果我不调用updateModel并手工操作,它就可以工作。 有没有想到updateModel()中出现的问题是它无法正确设置与外键实体的关系?

    我正在更新这个问题并开始发放奖金。问题简化了。如何在更新ASP.NET MVC编辑视图中的项(相关实体为FK)时成功地使用L2S和UpdateModel()?

    3 回复  |  直到 15 年前
        1
  •  2
  •   eglasius    15 年前

    在我看来你正在接受 HTTP Post请求中的postcode.postalcode .

    根据模型绑定的工作方式, 更新模型 呼叫 模型的updates.postcode.postalcode 你在过去。

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

        2
  •  0
  •   James Curran    15 年前

    不会 updating.client_postcode = client.client_postcode; 完成你想要的?

    Client.PostCode 应该在基于客户机的Seek上查找。

        3
  •  0
  •   Stefanvds    15 年前

    你不能做你正在尝试的,你不能改变 Postcode 像那样。

    詹姆斯的想法是正确的。

    Updatemodel() Formcollection

    这些值是如何进入 形式馆藏 ?它们是什么? keys ?

    基本上有两种编辑对象的方法。

    选项1:

    要更新的所有值名称在 形式馆藏 你只需要打个电话 UpdateModel() 起初的 对象。做 SubmitChanges()

    选项2:

    获取原始对象,手动更改其值(因为键不对应),然后执行 子改变()

    你想改变一个链接,你不能这样做。您只能编辑updating.client_postcode,在本例中,哪个是字符串?

    你能把整个动作复制到这里吗?所以我可以给你写一些不赌博的代码。