【问题标题】:Updating Foreign Key dependent record using LINQ to SQL使用 LINQ to SQL 更新外键相关记录
【发布时间】:2017-04-15 17:54:01
【问题描述】:

我正在处理包含大量数据的 50 多个表的应用程序。

假设我有两张桌子:

Parent { pID int (PK), pName varchar(30) }

Child { pID int (FK), cName varchar(30) }

这是我的查询:

using(MyDBContext ctx = new MyDBContext())
{
    Child ch = ctx.Childs.Where( c => c.pID == 1).FirstOrDefault();
    ch.cName = "ABCDEF";
    ctx.SubmitChanges();   //  <--- Executes but nothing changes...
}

我尝试了多个现有值,但 ctx.SubmitChanges() 在更新子记录时不起作用。有什么解决方法吗?

【问题讨论】:

  • 我认为,您需要将“ch”的更改添加到“ctx”,然后您必须调用“SubmitChanges”。在您的查询中,您在本地创建“ch”作为子项,并更改本地子项“ch”的“cName”。使用“SubmitChanges”添加 ctx 的一些新更改,但不更改“ctx”,只更改本地子“ch”。我希望你知道我的意思。 ;)
  • 不!那不是问题。我学到的是:首先,必须有一些东西来保存数据库中的数据。所以,这就是“ch”。其次,我在 Internet 上进行了搜索,并且 LinqToSQL 存在 FK 问题。
    后来,我切换到实体 6.0 数据模型,但这完全从自动生成的视图中删除了相互连接的主表。所以,对我来说没用。
  • 是Entity Freamwork 6吗?
  • @Vecchiasignora:Linq to SQL 类。

标签: c# sql linq sql-server-2012


【解决方案1】:

无法更新表,因为它没有主键。如果您的表(子)上没有主键,SubmitChanges 将不起作用。像这样在子表上设置主键

Child { ID int (PK), pID int (FK), cName varchar(30) }

愿一切都会好起来的

【讨论】:

  • 我知道,添加PK可以解决这个问题,但这不是必需的。
  • 我自己想出了解决办法... :)
【解决方案2】:

我自己找到了解决方案。我创建了一个更新记录的 SQL 过程。以下是我的做法:

create procedure UpdateChildName
(
    @pID int,
    @name varchar(30)
)
AS
BEGIN
    update Child set cName = @name where pID = @pID;
END;

Linq to SQL 部分:

using(MyDBContext ctx = new MyDBContext())
{
    ctx.UpdateChildName(1, "ABCDE");
    ctx.SubmitChanges();         //   <--- Now working great.
};

现在,我对 FK 或 PK 依赖没有任何问题... :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-27
    • 1970-01-01
    相关资源
    最近更新 更多