2009-11-02 52 views
3

相關的How to debug a linq to sql InsertOnSubmit statement?的LINQ的InsertOnSubmit到變更集

我執行下面的代碼位:

db.DBUsers.InsertOnSubmit(new DBUser 
    { 
     Id = id, 
     BrandCode3 = brandCode3.ToLower(), 
     LoweredUsername = username.ToLower(), 
     Username = username, 
     CreationDate = date, 
     Salt = salt, 
     Password = SecurityService.CreateMD5Hash(salt + password), 
     PasswordQuestion = passwordQuestion, 
     PasswordAnswer = passwordAnswer, 
     Comment = comment, 
     Email = email, 
     IsApproved = isApproved, 
     LastPasswordChangedDate = date, 
     FailedPasswordAnswerAttemptCount = 0, 
     FailedPasswordAnswerAttemptWindowStart = date, 
     IsLockedOut = false, 
     IsOnLine = false, 
     LastActivityDate = date 
    } 
); 
db.SubmitChanges(); 

UPDATE
這裏的主鍵的屬性:

[Column(Storage="_Id", DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true)] 
public System.Guid Id 

我注意到Auto-sync屬性的值是「從不」屬性窗口。 我的猜測是這需要OnInsert。要檢查一下。

之前,我打電話的SubmitChanges我檢查變更集,它顯示沒有插入,更新或刪除... SQL事件探查器顯示我沒有查詢被髮送,附加db.Log顯示我沒有執行動作。
爲什麼不提交任何內容?

回答

0

沒有在L2S模型中定義的主鍵?檢查至少一列的「主鍵」屬性設置爲true。

+0

檢查ID值是否爲主鍵而不是身份。 確定我從dbml中刪除了它並再次添加它。沒有變化 – 2009-11-02 11:37:19

0

ObjectTracking也許禁用?

+0

是的,它已啓用。只是爲了確保我添加了一行來將其設置爲true。不用找了。 – 2009-11-02 12:34:52

+0

你的電腦上有些奇怪的東西:),試着用一張簡單的表格創建一個新的數據庫,然後看看這個行爲是否保持不變。 – leppie 2009-11-02 13:10:57

+0

我在4個數據庫(在兩臺服務器上)上測試了它,並得到相同的行爲:S – 2009-11-02 13:45:43

0

我建議你發佈自動生成的主鍵和版本跟蹤字段的Linq註釋,那麼我們可能會有所幫助。這裏是我的工作實體模型的例子。

[Column(Storage="_Id", AutoSync=AutoSync.OnInsert, 
DbType="Int NOT NULL IDENTITY", 
IsPrimaryKey=true, IsDbGenerated=true, UpdateCheck=UpdateCheck.Never)] 

而且時間戳列:

[Column(Storage="_Ts", AutoSync=AutoSync.Always, DbType="rowversion NOT NULL", 
CanBeNull=false, IsDbGenerated=true, IsVersion=true, 
UpdateCheck=UpdateCheck.Never)] 

公共System.Data.Linq.Binary TS

+0

我向OP添加了一個反應。請看看 – 2009-11-09 14:50:59

+0

您是否真的在代碼中設置了Guid初級?我的猜測是,Linq不會考慮實體可插入,直到你觸發Id屬性設置。 Guid _id;不會用有意義的值初始化一個guid變量。您需要: entity.Id = Guid.NewGuid(); – camelCase 2009-11-10 00:29:08

0

沒有什麼我可以從代碼,將指示我的問題看。此時,我會將一個新的DBUser對象拖放到您的DBML文件(將其重命名爲DBUser2),執行此代碼並觀察它的工作情況。有工作代碼,我會檢查兩個實體之間的差異。這將是不明顯的。另外,在你的DBML文件上點擊「運行自定義工具」,並觀察你的錯誤/警告窗口中是否有任何警告 - SqlMetal可能會告訴你警告形式有什麼問題。

+0

sqlmetal在哪裏顯示任何反饋?沒有彈出控制檯窗口,也沒有任何行出現在錯誤列表中。 – 2009-11-09 08:35:01

+0

檢出您的輸出窗口。您的警告窗口也會有sqlmetal錯誤。 – 2009-11-09 10:22:39

0

如果您的Guid Id列正在由數據庫生成,那麼這是Linq To Sql中的一個錯誤,如文檔here所述,因爲您的屬性名稱與列名稱不同。

從你的例子看來,你將它分配到你的應用程序中,所以它可能不適用。

相關問題