在使用Linq和SQL时,如何防止将新记录插入表中?

时间:2008-10-14 11:30:03

标签: c# sql-server linq

当创建映射到我的一个SQL Server表的新对象时,LINQ在调用SubmitChanges时会在表中插入一条新记录。我想阻止这一点,但仍然需要我的新对象。

我知道自定义方法,但无论如何都要禁用此行为,以便它只更新现有记录并且永远不会插入新记录,无论我是否调用MyTableClass myObject = new MyTableClass()

感谢。

3 个答案:

答案 0 :(得分:2)

您总是可以创建一个不执行任何操作的存储过程并将其分配给插入角色 - 这是一个真正的黑客,但它会完成工作!

我建议也许这个问题即将到来的事实表明你在引用这个对象时采用的方法有问题 - 究竟是什么需要使用这个新对象?

答案 1 :(得分:2)

如果您希望数据上下文在插入时进行barf,则可以执行以下操作:

partial class DataClasses1DataContext
{
    public override void SubmitChanges(System.Data.Linq.ConflictMode failureMode)
    {
        if(GetChangeSet().Inserts.OfType<MyObject>().Any())
        {
            throw new InvalidOperationException("No inserts!");
        }
        base.SubmitChanges(failureMode);
    }
}

有什么好处吗?

[是: 你能简单地把它添加为“干净” - 即Attach(obj,false);

如果你不想要模型中的对象,为什么要将它添加到数据上下文?]

答案 2 :(得分:0)

你能否在服务器端阻止它?作为没有插入访问权限的角色进行连接。我怀疑,迟早,这将是防止插入的最无懈可击的方式。