2008-10-14 38 views
2

創建一個映射到我的SQL Server表的新對象時,當我調用SubmitChanges時,LINQ會向表中插入一條新記錄。我想要阻止這一點,但仍然需要我的新對象。如何防止在使用Linq和SQL時向表中插入新記錄?

我知道自定義方法,但無論如何禁止這種行爲,以便它只是更新現有記錄,不會插入新記錄,無論我是否調用​​3210。

謝謝。

+0

「新」本身不會做任何事情......你需要走出去的你的方式來添加它(Attach/InsertOnSubmit)到上下文...? – 2008-10-14 11:48:01

回答

0

你不能阻止它在服務器端嗎?作爲沒有插入訪問權限的角色連接。遲早,這將是防止插入的最堅固的方法,我懷疑。

+0

我們使用windows auth,因此使用一個可以插入的應用程序,但是他們不應該使用其他應用程序。 – HAdes 2008-10-14 11:33:13

2

你總是可以創建一個不做任何事情的存儲過程,並將其分配給插入角色 - 這是一個真正的黑客,但它會完成工作!

我會建議,也許這個問題即將出現的事實表明,你在引用這個對象時所採取的方法有什麼問題 - 究竟需要使用這個新對象呢?

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

如果你不想在模型中的對象,爲什麼把它添加到數據上下文?]

+0

因爲我仍然需要能夠檢索數據並更新數據,所以不要插入。 – HAdes 2008-10-14 11:41:26

相關問題