【问题标题】:How do I prevent inserting new records into tables while using Linq and SQL?使用 Linq 和 SQL 时如何防止向表中插入新记录?
【发布时间】:2008-10-14 11:30:03
【问题描述】:

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

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

谢谢。

【问题讨论】:

  • “新”本身不会做任何事情......你需要不遗余力地将它(附加/插入提交)添加到上下文......?

标签: c# sql-server linq


【解决方案1】:

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

我认为,这个问题的出现可能表明您在引用该对象时所采用的方法有问题 - 究竟是什么需要使用这个新对象?

【讨论】:

    【解决方案2】:

    如果你想让你的数据上下文在插入时出错,你可以这样做:

    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);

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

    【讨论】:

    • 因为我仍然需要能够检索数据和更新数据,而不是插入。
    • 谢谢。但这并不是我想要阻止的所有插入,只是一张桌子。我会给你的 Attach(obj, false) 一个机会,但必须在我所有的对象周围传递数据上下文,这是我不喜欢的。
    • 您能否澄清一下:这是新/现有记录中的孩子吗?
    【解决方案3】:

    你不能在服务器端阻止它吗?作为没有插入访问权限的角色连接。我怀疑,迟早这将是防止插入的最安全的方法。

    【讨论】:

    • 我们使用windows auth,所以使用他们可以插入的一个应用程序,但他们不应该使用其他应用程序,例如。
    猜你喜欢
    • 1970-01-01
    • 2014-06-18
    • 2015-04-14
    • 2016-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-12
    • 2017-04-19
    相关资源
    最近更新 更多