使用LINQ to SQL更新外键依赖记录

时间:2017-04-15 17:54:01

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

我正在处理包含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()不起作用。任何解决方法?

2 个答案:

答案 0 :(得分:0)

无法更新表格,因为它没有主键。如果您的桌子(孩子)上没有主键,SubmitChanges将无效。在Child表上设置主键,如下所示

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

并且可以通过确定

答案 1 :(得分:0)

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

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

Linq to SQL Part:

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

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