当创建映射到我的一个SQL Server表的新对象时,当我调用SubmitChanges时,LINQ会在表中插入一条新记录。我想阻止这种情况,但仍然需要我的新对象。
我知道自定义方法,但是否可以禁用这种行为,使其只更新现有记录,从不插入新记录,无论我是否调用了MyTableClass myObject = new MyTableClass()
。
谢谢。
如果你想让你的数据上下文在插入时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);
如果您不希望模型中的对象,为什么要将其添加到数据上下文中?]
您总是可以创建一个什么都不做的存储过程,并将其分配给插入角色-这是一个真正的破解,但它会完成任务!
我建议,也许这个问题的出现表明你引用这个对象的方法有问题——到底是什么需要使用这个新对象?
你能在服务器端不阻止它吗?以没有插入访问权限的角色连接。我怀疑,这迟早会成为防止插入的最防弹的方法。