2009-07-27 15 views
0

這工作:LINQ刪除 - 可以刪除的一種方式,不能使用單枚舉

var i = (from x in db.Test 
    where x.Id == 1 
    select x).First(); 

db.Test.DeleteOnSubmit(i); 
db.SubmitChanges(); 

我得到一個錯誤投這個(INT /串):

var i = db.Test.Single(x => x.Id == 1); 
db.Test.DeleteOnSubmit(i); 
db.SubmitChanges(); 

我也是能夠在同一張桌子上使用Single進行更新。任何線索?

更新

這裏是更多的錯誤消息:

這裏是更多:

[InvalidCastException的:無法投類型 'System.Int32' 的對象爲類型 'System.String' 。] System.Data.Linq.SingleKeyManager 2.TryCreateKeyFromValues(Object[] values, V& v) +134 System.Data.Linq.IdentityCache 2.Find(Object [] keyValues)+57 System.Data.Linq.StandardIdentityManager.Find(MetaType type,Object [] keyValues)+51 System.Data.Linq。 CommonDataSe rvices.GetCachedObject(MetaType類型,Object [] keyValues)+113 System.Data.Linq.ChangeProcessor.GetOtherItem(MetaAssociation assoc,Object instance)+235 System.Data.Linq.ChangeProcessor.BuildEdgeMaps()+510 System。 Data.Linq.ChangeProcessor.SubmitChanges(ConflictMode failureMode)+137 System.Data.Linq.DataContext.SubmitChanges(ConflictMode failureMode)453個 System.Data.Linq.DataContext.SubmitChanges()+38

+0

你提到你得到了一個轉換錯誤,但它來自哪裏?它會給你更多的信息嗎? – 2009-07-27 19:24:57

回答

2

什麼是數據你的ID字段的類型?

我只是跑了反對,在有數據的虛擬數據庫下面的代碼,我的重點領域是int類型:

using (var db = new dbDataContext()) 
{ 
    var x = db.items.Single(i => i.fld_key == 1); 
    db.items.DeleteOnSubmit(x); 
    db.SubmitChanges(); 

    var y = (from i in db.items 
      where i.fld_key == 2 
      select i).First(); 
    db.items.DeleteOnSubmit(y); 
    db.SubmitChanges(); 
} 

我有要麼沒有問題,檢查數據庫,項目1和2都被成功刪除。

您是否嘗試刪除第二個代碼塊中不存在的項目 - 正如您將其刪除的項目一樣。這將意味着y實際上是null,並且您正在嘗試DeleteOnSubmit傳遞null,這將導致無效投射,因爲您無法投射null。

試着在第二個代碼塊中嘗試刪除不同的項目,我會想象它會在這種情況下工作。

變化。單以.SingleOrDefault和包裝你刪除線,以檢查空:

if(null != x) 
{ 
    db.items.DeleteOnSubmit(x); 
    db.SubmitChanges(); 
} 

我敢打賭這將解決您遇到的問題。

編輯看看你發佈的異常,我想知道你是否在生成你的dbml後將你的表的數據類型改爲int。將表重新加載到您的dbml中,看看是否解決了這個問題。要麼是這個,要麼是相反的問題,你把它改成了VarChar/NVarChar並且沒有更新你的dbml。

我肯定會看看您的實體,並確保數據類型與您的數據庫中的數據表中的數據類型匹配。

+0

這有幫助。我認爲這些實體有一些問題。有一個關聯。這給了我一些檢查。 – Steve 2009-07-27 19:53:56

1

最近是否更改了數據庫中的數據類型? (也許這些類型目前與您生成的類不同)

同樣,如果您使用存儲過程刪除項目,請確保參數類型與您生成的類型匹配。