創建一個映射到我的SQL Server表的新對象時,當我調用SubmitChanges時,LINQ會向表中插入一條新記錄。我想要阻止這一點,但仍然需要我的新對象。如何防止在使用Linq和SQL時向表中插入新記錄?
我知道自定義方法,但無論如何禁止這種行爲,以便它只是更新現有記錄,不會插入新記錄,無論我是否調用3210。
謝謝。
創建一個映射到我的SQL Server表的新對象時,當我調用SubmitChanges時,LINQ會向表中插入一條新記錄。我想要阻止這一點,但仍然需要我的新對象。如何防止在使用Linq和SQL時向表中插入新記錄?
我知道自定義方法,但無論如何禁止這種行爲,以便它只是更新現有記錄,不會插入新記錄,無論我是否調用3210。
謝謝。
你不能阻止它在服務器端嗎?作爲沒有插入訪問權限的角色連接。遲早,這將是防止插入的最堅固的方法,我懷疑。
我們使用windows auth,因此使用一個可以插入的應用程序,但是他們不應該使用其他應用程序。 – HAdes 2008-10-14 11:33:13
你總是可以創建一個不做任何事情的存儲過程,並將其分配給插入角色 - 這是一個真正的黑客,但它會完成工作!
我會建議,也許這個問題即將出現的事實表明,你在引用這個對象時所採取的方法有什麼問題 - 究竟需要使用這個新對象呢?
如果你希望你的數據上下文在插入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);
如果你不想在模型中的對象,爲什麼把它添加到數據上下文?]
因爲我仍然需要能夠檢索數據並更新數據,所以不要插入。 – HAdes 2008-10-14 11:41:26
「新」本身不會做任何事情......你需要走出去的你的方式來添加它(Attach/InsertOnSubmit)到上下文...? – 2008-10-14 11:48:01